¿La instalación / uso de Linux te ayudará a aprender programación?

Sí, yo diría que sí.

El mantenimiento en una máquina Linux no es tan sencillo como en una Mac o una PC. Le indica que retire las ruedas de entrenamiento (por ejemplo, las GUI) y descubra cómo manejar el cambio de palanca. El resultado es que terminas siendo más consciente de cómo funcionan los programas en general y de lo que hacen las cosas debajo del capó. ¿A dónde va este archivo cuando hago clic derecho y lo elimino? ¿Qué pasa cuando vacías la basura? Etcétera. La comunidad de Linux es bastante vibrante, por lo que hay un montón de recursos disponibles para ayudarte a comenzar.

Por otro lado, el entorno es más amigable para la programación que, por ejemplo, Windows (en mi opinión). La razón principal es la línea de comando (también conocida como terminal, también conocida como shell Bash). Tener una buena comprensión de los comandos de Linux será muy útil en el futuro. Trabajar en compañías en la industria de CS le exigirá tener, como mínimo, una comprensión intermedia de la línea de comando. También lo expone al mundo de los programas CLI (interfaz de línea de comandos) / TUI (interfaz de usuario de terminal), que yo diría que son más abundantes que los programas tradicionales. Estas aplicaciones más pequeñas son a menudo indispensables para algunas tareas de memoria. La productividad aumenta a medida que aprendes más y más línea de comandos. Algo tan aburrido y repetitivo como crear 1000 carpetas es tan simple como escribir mkdir {1..1000} en su terminal. Los comandos pueden parecer desalentadores al principio, pero herramientas como Explain Shell y Command Line Fu hacen un gran trabajo para descomponer las cosas y aprender más sobre ellas.

Personalmente, creo que todos los desarrolladores deberían probar y usar Linux durante un par de meses. No espero que termines usándolo permanentemente, pero la experiencia obtenida es bastante valiosa. Recomiendo usar Ubuntu como una distribución de Linux para principiantes simplemente por la gran comunidad y la facilidad de instalación. Actualmente, uso un Macbook Air porque está basado en Unix (lo que significa que puedo usar los mismos comandos de Linux / muy similares, por lo que es excelente para el desarrollo), es una máquina confiable con una gran duración de la batería y portabilidad, y admite más programas para el consumidor ( como Google Drive, Sketch, etc). Creo que es un buen paso hacia arriba de Linux puro.

Sí, principalmente por las razones bien explicadas por Anurag Banerjee. Sin embargo, no va a “aprender” mucho a menos que esté “usando” toda la potencia de un shell de terminal (incluida la “instalación” de una distro casi desde cero), que son en sí mismos lenguajes de programación legítimos.

Los procedimientos de instalación de la mayoría de las distribuciones de Linux se han automatizado en asistentes de apuntar y hacer clic. La ayuda provista a través de estas presentaciones “Atrás” / “Siguiente” es casi sin sentido, sin la familiaridad con ciertos conceptos de * nix, por lo que no le ayudarán a “aprender” nada, excepto cómo una distro en particular agrupa los conjuntos de funciones proporcionados por sus paquetes.

(Dicho esto, la instalación de Arch Linux (Guía de instalación) es desalentadora incluso para un pirata informático experimentado y una buena prueba por fuego … si te gusta que te quemen).

Si su uso de Linux sigue el mismo patrón que la mayoría de los demás sistemas operativos y shells gráficos, entonces aprenderá tanto sobre la programación como sobre el uso de esos, lo que no es mucho.

(Más tarde, cuando sepa cómo se construyen los sistemas, cualquier pieza de software hará que la mente curiosa entienda cómo funciona bajo el capó).

Sin embargo, con el uso regular de shells como bash y [t] csh (o el zsh más avanzado pero menos popular) estará programando .

Las tres virtudes de un GRAN programador:

  1. La pereza sobre el rendimiento repetitivo de tareas simples (como la normalización de los nombres de todos los archivos MP3 en una carpeta con awk , sed , tr , perl , o interpolación de variable avanzada incorporada desde la propia carcasa) inspirará la construcción de extensas líneas de una sola línea los cuales evolucionarán a scripts que encontrará que necesitarán algunas funciones repetitivas que escribirá para evitar que se repita. A veces, las tareas que podrían haberse “realizado” en media hora de tedio crecen como kudzu en complejas enredaderas de tuberías y redirecciones que recorren todo el conjunto de herramientas de GNU.
  2. La impaciencia surge al consumir los frutos de sus jardines de conchas y al darse cuenta de que el entorno puede derivar ciertas opciones. Más programación, predicción, anticipación y aprendizaje para hacer que las computadoras hagan el aprendizaje por usted.
  3. Hubris (u OCD) apela a su orgullo: lo obliga a agregar una respuesta útil cuando alguien invoca su script sin ninguno de los argumentos necesarios o con una opción de ayuda . Y, hey, tal vez debería apoyar una opción corta de “-h”, también. ¿Y por qué tengo esa extensión “.sh” en el script? Es posible que desee volver a escribirlo en otro idioma más tarde, y la función no debe estar vinculada a la implementación. Y, querido Señor, ¡estas dos funciones son idénticas en un 90%! Tengo que refactorizar estos! Al final del día, estoy más feliz con una caída neta en mi total de líneas de código.

Puedes aprender de cualquier cosa, pero tienes que querer aprender. Tienes que ser el tipo de persona que no solo se siente asombrada y / o apreciada por un giro fantástico de la lógica animada, sino que está inspirada para descubrir cómo funciona, y quizás hacerlo un poco mejor.

Por supuesto.

Sí. Puede aprender a escribir código, hasta cierto punto, sin saber nada sobre el entorno en el que se ejecuta, pero si su intención es realmente “compilar software” que se debe empaquetar, distribuir, instalar, configurar, ejecutar y mantener: El diseño de su software deberá reflejar las características de sus entornos de compilación, prueba, distribución y tiempo de ejecución. Todo esto afecta a la forma en que organiza su código (p. Ej., Cómo divide las cosas en módulos), el diseño para la verificación, las convenciones de documentación en línea, el diseño para la actualización (y para su ejecución en sistemas que se actualizan en torno al código). qué bibliotecas utiliza, qué servicios de sistema operativo puede esperar que estén disponibles, scripts de inicio, etc., etc., etc.

Todo esto se expone en los entornos Unix (no solo Linux, sino BSD, derivados de Solaris, etc.), y la creación / mantenimiento de un entorno Unix puede proporcionar mucho conocimiento, perspectiva y experiencia sobre cómo encajan las piezas. Todos estos problemas están ahí si está escribiendo para la implementación en Mac, PC o teléfonos inteligentes, pero los detalles están menos expuestos; Más fácil de aprender en un entorno Linux y luego busque los detalles equivalentes más adelante.

Solo como un ejemplo: si está intentando escribir un sitio web complicado, digamos un sitio de compras, necesita saber cómo encajan todas las piezas, qué se ejecuta en el navegador, qué hace el servidor web (y todos sus diversos archivos), detalles de la plataforma de back-end (si usa algo como Rails), el sistema operativo y la pila de red, etc. Puede aprender mucho instalando y configurando un sistema existente. Si no ha instalado y configurado un sistema de este tipo, no tiene una oración para escribir uno propio.

Como otro ejemplo: intente instalar una colección completa de software de manejo de correo, incluido un programa de correo (por ejemplo, postfix), antivirus y antispam, y un programa de lista de correo (que generalmente también requiere una base de datos y un servidor web).

Ejemplo contrario: si lo que está haciendo es desarrollar nuevos algoritmos y su código “vivirá” en su propia “caja de arena”; por ejemplo, si está analizando datos de sensores en MATLAB, no necesita hacerlo. Sabes algo sobre el medio ambiente más grande.

Aprender Linux o Windows ayuda a aprender el sistema operativo y cómo funcionan, de modo que cuando realiza la programación, comprende el entorno en que se ejecuta la aplicación. Sin embargo con cada SO obtienes herramientas. Con las distribuciones GNU de Linux, obtiene muchas herramientas que lo ayudan a comenzar a aprender diferentes aspectos de la codificación sin interrumpir el banco desde los repositorios, mientras que para las ventanas necesita buscar en línea y descargarlas.

Aprender Bash Shell, que es el entorno de línea de comandos predeterminado para Linux, puede ayudar a aprender a programar, y muchas aplicaciones de Linux tienden a incorporar Shell Scripts. Por ejemplo: Poner el script bash en el programa C

sin embargo, Windows también le permite ejecutar scripts de powershell en C # como Ejecutar scripts de PowerShell desde C #

Ambos tienen un enfoque diferente. Linux es más basado en procedimientos con Bash y Windows está más orientado a objetos con powershell.

Así que sí aprender Linux ayudará y también las ventanas. Aprender ambos es mejor.

Habiendo hecho mucha programación a lo largo de los años (realmente una de mis cosas favoritas para hacer) y una buena cantidad de trabajo bajo varias formas de UNIX, tendría que decir:

No. Los dos no están realmente relacionados entre sí.

La administración del sistema es una cosa, y ciertamente si realmente va a configurar una instalación de UNIX, tendrá muchas posibilidades de usar scripts de shell, scripts de perl, tal vez scripts de python, etc. – pero esos solo constituyen una programación.

Diseñar y construir software es, como dicen, un nivel completamente diferente. Aparte de todo el diseño arquitectónico, las especificaciones funcionales, el análisis de objetos, etc., esperamos que sus esfuerzos de programación eviten la dependencia de un sistema operativo particular tanto como sea posible. Y debe estar aprendiendo tanto las capacidades como los escollos de los lenguajes de programación elegidos, en última instancia, hasta un grado bastante avanzado. Debe aprender a lidiar con las sutilezas de sus sintaxis, especialmente en C o C ++, en las que solo tiene que equivocarse un poco para obtener un increíble flujo de informes de errores que pueden ayudarlo a guiarlo hacia el verdadero problema. Estas no son cosas que obtendrá de la administración del sistema, incluso de los scripts de shell (a pesar del parecido superficial de varios conjuntos de comandos de shell en algún subconjunto de C).

Si realmente quieres aprender a programar, ¡felicidades y tienes que hacerlo! Y cuanto más seriamente lo tomas, más a fondo lo aprendes, más gratificante lo encontrarás.

Tal vez un poquito, pero probablemente no más, a menos que vaya con una distribución de origen donde tenga que compilar todo usted mismo, y tenga problemas que deba solucionar usted mismo. La mayoría de las distribuciones están bien empaquetadas y no recuerdan mucha habilidad para instalar algo con éxito.

Tener un sistema operativo con fuentes completas significa que puede acceder a algunas de las características menos documentadas y darles un sentido. Tener fuentes que coincidan con la versión del sistema operativo que está ejecutando (con parches) es extremadamente útil, especialmente si su distribución está muy rezagada con respecto a las últimas versiones de Linux (como lo hace RedHat).

¿Pero qué te ayudará a aprender a programar? Programación.

Y hay diferentes tipos de programación. Me siento muy cómodo trabajando con demonios de red (como el servidor Merit AAA / RADIUS o Apache httpd), y odio trabajar en las interfaces de usuario, especialmente las GUI.

La ventaja de Linux es que la mayoría de los componentes son de código abierto, por lo que puede encontrar la fuente de un paquete que cree que podría darle ejemplos de cómo implementar un cierto tipo de característica.

Soy un usuario de Linux desde hace diez años y también programo un poco como pasatiempo. Así que mi punto de vista no es la programación profesional sino la programación como un hobby. Principalmente hago cosas con PHP / HTML / CSS.

Lo que creo que más ayuda a la programación es un entorno de programación fácil y fácil de configurar, como un IDE o similar. Por lo tanto, no se trata del sistema operativo que elija, sino del entorno que elija.

Yo mismo cambié a Linux poco después de comenzar a programar, y puedo decir que algunas tareas fueron más fáciles. Instalar y configurar una pila LAMP en funcionamiento era cuestión de un solo comando y modificar algunos archivos de configuración. Más tarde, supe que hay paquetes similares para Windows (el entorno del que vengo), pero sigo pensando que tener una instalación fácil de instalar a través del sistema de administración de paquetes es un pequeño pro.

Los sistemas Linux también incluyen algunas herramientas útiles listas para usar, como editores con colores de código, y si necesita una línea de comando sólida en su trabajo, entonces Linux lo tiene listo para usar.

Pero en general creo que no hay nada atractivo en el entorno de Linux como tal. Entorno de desarrollo es el que importa. También creo que hay mejores IDE y entornos en otros sistemas operativos. Pensando en las herramientas de Unity3D, Visual Studio o Apple Developer aquí. No los he usado, pero suenan como paquetes consistentes que juegan bien juntos. En el mundo de Linux, solo tengo un editor de texto, un cliente FTP y un montón de otros programas pequeños, controlados parcialmente a través de GUI y parcialmente a través de la línea de comandos. No es muy consistente, ni efectivo, pero funciona para mí.
También hay algunos IDE: s para Linux también, y pocos son muy buenos que he escuchado. Pruebe por ejemplo KDevelop, Eclipse o Netbeans.

No. Estudiar programación (y practicar programación) te ayuda a aprender programación.

Dicho esto, una amplia gama de actividades de desarrollo son más fáciles en Linux (o OS X) que en Windows.

En mi opinión, no.

Linux es un sistema operativo tipo Unix, y la instalación / uso de Linux lo ayudará a comprender mejor cómo programar para ese sistema operativo, pero no debido a la instalación o el uso de Linux, porque una vez que está instalado, puede aprender a codificar para Linux haciendo. No es necesario ejecutar el sistema operativo para el que desea codificar, pero es muy útil para que usted sea un mejor programador para esa tarea en particular, ya que puede probar su código en ese sistema operativo para ver si funciona correctamente. Pero eso es todo.

Ya no..

Hace 10 a 15 años, tenía que compilar el reproductor de música con soporte de mp3 o recompilar el módulo del kernel para obtener soporte inalámbrico o usar mucho el terminal para compilar binarios. Tuvimos que montar manualmente unidades USB / disquete en una carpeta en particular. Hoy en día, todas las ventanas / mac / linux tienen una sensación y nivel de madurez similar (si ignora la pelusa).

Linux hace que sea más fácil acceder a las herramientas (todo lo que necesita para obtener las herramientas necesarias para la programación básica de c / c ++) es sudo apt-get install build-essential vim-full. Y a medida que avanza, será más fácil para usted obtener más herramientas … pero una vez que todo está configurado y usted decide su editor / ide / depurador, la programación es prácticamente la misma en cualquier sistema operativo.

¿Comprar zapatos te ayudaría a aprender a correr? Supongamos que eres un bebé que no sabe caminar. Si empiezas a aprender a correr con zapatos cuando te cuesta dar un paso, probablemente fracasarás. Primero debe aprender a usar sus pies para pararse, luego a balancearse en una pierna y luego a balancear el equilibrio de una pierna a otra para caminar …

A Windows no le importan tus zapatos, es el transporte público. Te lleva a lugares. Rápido. Barato. Y solo a esos lugares. Si tiene que recorrer mucha distancia en poco tiempo, use Windows. Pero, si quieres explorar…. Si quieres salir de los caminos trillados y, tal vez, haber perdido la esperanza y la cordura en los oscuros bosques de Linux, ¿quién puede detenerte?

No, la instalación y el uso de Linux de Linux es probablemente un problema importante para alguien que no sabe nada de computadoras, pero no aprende a programar. Entonces el aprendizaje de la programación se puede hacer en cualquier sistema. Pero el software de programación bajo Linux es diferente de otros sistemas.

Como estudiante de ciencias de la computación que usa linux me ayudó en cosas como:

1. Aprendí más sobre mi computadora técnicamente.
2. Quiero contribuir en proyectos de código abierto para mejorar mis habilidades de programación y también lo incluiré en mi CV.
3. Aprendí a resolver los problemas de “problemas de la computadora” solo buscando o preguntando a alguien en las comunidades de código abierto y luego hacerlo por mi cuenta.

pero como respuesta solo “usar linux” no lo convertirá en un programador o mejorará sus habilidades de programación

El proceso estándar de instalación / caso de uso no implica la programación, pero el resultado final lo coloca en un entorno favorable para comenzar a aprender.

Al usar un traje, ¿aprendes a coser uno?

No puedes aprender nada hasta que quieras aprenderlo.

Linux es solo un sistema operativo, no te enseñará cómo codificar. Mejor encontrar algunos recursos en línea y aprender a codificar. Seguro que puedes codificar en la máquina linux sin embargo. Y, Linux es divertido.

No, he encontrado que la mejor ruta para un principiante en programación es en una máquina con Windows. Simplemente obtenga una copia gratuita de Visual Studio Express y listo. No hay comandos para aprender, pero código y gráficos visuales de arrastrar y soltar. La mayoría de las personas que comienzan pueden diseñar lo que quieren y agregar el código al reverso. C # le enseñará las estructuras de datos y el código para muchos de los otros lenguajes C / Java cuando sienta que desea ir más allá.

No. Pero usar linux podría eventualmente darte una razón para experimentar con expresiones regulares (que son compatibles con muchas de sus funciones de línea de comando) y aunque eso no te ayudará a aprender programación, podría ser útil si lo haces.

Definitivamente! También es más fácil configurar todo lo que necesitas. Por no mencionar el gran editor Vim + algunos complementos, que elimina la necesidad de IDE.