¿Podré llegar a un nivel respetable como ingeniero de software si no soy competente con la línea de comandos y los entornos Unix?

Puedes, sí, pero solo harás las cosas más difíciles para ti. Los programadores siguen usando Unix y la línea de comando por una razón: es un increíble multiplicador de fuerza . No solo es eminentemente útil de forma interactiva, para mantener su sistema y proyectos, sino que también facilita la automatización de gran parte. Si alguna vez necesita hacer algo aburrido y repetitivo, o repetir el mismo conjunto de cosas una y otra vez, en una máquina o en muchas, ¡aprender a usar la línea de comandos le ahorrará mucho trabajo!

¿Te encuentras haciendo el mismo conjunto de acciones, tal vez con ligeras variaciones, una y otra vez? Entonces puede mejorar su vida ahora mismo aprendiendo la administración básica del sistema. E incluso si no está haciendo algo así en este momento, es probable que lo haga en el futuro. Quizás, a medida que comience a trabajar en proyectos cada vez más grandes, necesitará escalar su software a muchas máquinas. Mucho más fácil con la línea de comando! O tal vez comience a usar herramientas más complejas que requieren cierta configuración: nuevamente, simplemente automatice su proceso de compilación.

Otra característica realmente agradable de aprender la línea de comandos y la forma Unix es la componibilidad . Es mucho más fácil combinar herramientas aparentemente ortogonales en un solo sistema con la línea de comando; eso es parte de su verdadero encanto. Por ejemplo, si alguna vez necesita generar buenos informes en PDF para algunos datos cada semana, puede poner manualmente los datos en Excel, hacer los gráficos relevantes, incluirlos en Word, etc. O podría tener un pequeño script que use Gnuplot y Pandoc y LaTeX para generar todo automáticamente. (Y, gracias a LaTeX, ¡también se verá mejor!)

Configurar algo como esto llevará más tiempo que hacerlo a mano … la primera vez . Después de eso, ahorras mucho tiempo. A veces, incluso el paso de configuración no lleva mucho más tiempo. Esto te hará ganar tiempo para cualquier tarea que hagas más de un puñado de veces.

Y, en un nivel superior, esto también es cierto sobre aprenderlo . Claro, al principio, tendrás que esforzarte un poco para acostumbrarte a usar la línea de comando y serás lento por un tiempo. Pero a la larga, le ahorrará tiempo y esfuerzo al hacerlo más eficiente.

Ese es el tipo de compensación que tomas no porque sea necesario, sino porque es muy beneficioso.

Si no eres competente con las herramientas de línea de comandos y la filosofía de Unix ahora? Si seguro. Quiero decir, nadie nació con ese conocimiento.

¿Si nunca te vuelves competente? No. Si bien el uso de un IDE a veces es la elección correcta, si solo puede codificar dentro de un IDE, entonces probablemente sea uno de esos programadores que simplemente “escribe clases” y no puede codificar fuera de un entorno corporativo. Eso no es “un nivel respetable”.

¿Las buenas noticias? Aprender la interfaz y el entorno de la línea de comandos es mucho más fácil que aprender el mumbo-jumbo interno FactoryVisitorFactory de cualquier empresa, y “la filosofía Unix” es solo un puñado de palabras para “software modular y bien diseñado”.

En otras palabras, la pregunta implícitamente parece hacer una suposición falsa, ya que la programación de línea de comandos es difícil. No es. Es muy fácil en relación con el poder que tiene. Es un REPL para su computadora. Está bien si no dominas la línea de comando ahora , pero si te niegas a aprenderla, nunca crecerás.

Si bien la amplitud de los conocimientos y la experiencia siempre es algo bueno, el respeto de sus compañeros y personas de la tercera edad a menudo vendrá primero como resultado de haber demostrado competencia o experiencia dentro de un alcance más limitado.

Una vez que haya alcanzado la competencia en un área, puede intentar lograrla en otra. A medida que pase el tiempo, el respeto por su experiencia crecerá porque llegará a un público más amplio. En última instancia, podrá sintetizar cosas que ha aprendido de diferentes áreas, lo que comenzará a hacer que se destaque por su amplia experiencia y por su capacidad para hacer conexiones entre áreas o para aplicar técnicas de un área a otra.

A su pregunta exacta, si está trabajando en, digamos, un entorno de Windows ahora pero no es competente en él, entonces podría quedarse con eso hasta que lo haga y abordar Unix un poco más tarde. Aprender algo como PowerShell podría serle más útil en este momento.

Pero entonces, depende de tus objetivos. Su pregunta parecía ser principalmente sobre ganar respeto. Si estuviera buscando trabajo, mi respuesta sería un poco diferente. En ese caso, necesita profundidad en al menos algunas cosas y cierta exposición a otras para demostrar que no está demasiado enfocado, y para aumentar sus posibilidades de que un posible empleador lo entreviste solo porque vio “XYZ” en su currículum. Eso puede brindarle una oportunidad, pero no el trabajo a menos que el entrevistador se convenza de que puede obtener suficiente competencia en “XYZ” en el trabajo para cumplir con los requisitos. Demostrar que tiene la capacidad de autoaprendizaje puede ser útil para ese fin.

A menudo se espera que un buen ingeniero tenga más amplitud en sus habilidades que simplemente escribir y mantener el código en un IDE. Esto es especialmente cierto para los ingenieros en startups y equipos más pequeños.

Si estamos trabajando en algún problema y te veo escribiendo Java en un IDE para lograr algo que podría haber tomado 10 segundos con una utilidad UNIX como sed o awk, puedes apostar que perderé el respeto por tus habilidades. Y si el tiempo es esencial, estaré más que un poco enojado.

Como con la mayoría de las cosas, lo más probable es que aprenda las cosas que necesita saber sobre ambos en algún lugar del camino. No se llega a “un nivel respetable como ingeniero de software” sin trabajar en proyectos de la vida real. Tan pronto como haya nuevos comandos o habilidades que necesite, simplemente se sentará y aprenderá, buscando en Google o preguntándole a un colega.

No…

Con Windows, ¿cómo muestra la dirección IP de su PC o enrutador sin símbolo del sistema?
Supongo que podría escribir algo en Visual para hacer el trabajo, pero ¿por qué lo haría si el símbolo del sistema está disponible y es preciso?
Este es solo un ejemplo, pero estas herramientas existen para hacer la vida más fácil; en cuanto a Unix … está en todas partes, si no comprende o trabaja en un entorno Unix, tendrá una capacidad muy limitada.

Así que no … sin ser competente con la línea de comandos y entornos Unix, nunca alcanzará un nivel respetable como ingeniero de software.

Trabajo como programador profesional por más de 20 años. Codifiqué, diseñé y gestioné múltiples proyectos, el más grande hasta ahora fue de más de $ 10 millones en proyectos de desarrollo de software personalizado, con un equipo de alrededor de 20 desarrolladores (+ ingenieros de sistemas, control de calidad, integradores, etc.). Mi trabajo actual es arquitecto jefe de software en una pequeña empresa privada (120 programadores), y soy uno de los propietarios de la empresa. ¿Puedes llamarlo “nivel respetable”? No sé, comparado con Sergey Brin, estoy 100% en bancarrota.
No soy, y nunca seré competente con la línea de comandos y Unix en general. Hice mi parte de la programación de Unix en la universidad, nunca me gustó demasiado, y la mayoría de mi operador trabajó en el entorno de Microsoft (cualquier cosa excepto TI / Web clásica, desde controladores de dispositivos hasta grandes aplicaciones distribuidas de comando y control).
Puedo instalar distro, recompilar el kernel y configurar mi XBMC en la instalación de RaspberryPi, así mismo puedo configurar mi NAS y enrutador doméstico, incluida la configuración de dnsmask no trivial y la VLAN invitada usando iptables (Google puede encontrar cosas increíbles, que nunca podría hacer solo). Odio Emacs y vi, y prefiero IDE “normal” como VS.
Solo mis 2 centavos 🙂

Si busca respeto entre pares , entonces depende del dominio y la naturaleza del trabajo. Si todos sus compañeros de trabajo son usuarios expertos de CLI y expertos de Unix, entonces lo despreciarán si tiene problemas con los comandos (¡o copie y pegue desde un archivo de texto!).
La otra forma de verlo es lo que Tikhon Jelvis ha resumido perfectamente.

Mi nivel de respeto por un ingeniero de software depende del nivel de amor que muestra por la ingeniería de software. Cualquier persona que ama la ingeniería de software aprenderá la línea de comandos y el entorno Unix con pasión y placer. Entonces NO .

Creo que lo que le impediría llegar a un nivel respetable sería la falta de voluntad para aprender las herramientas que serían más efectivas para llevar a cabo el proyecto. En todo caso, debe esforzarse por agregar herramientas a su repertorio a menos que, por supuesto, esté seguro de que son herramientas arcaicas que están cayendo en desuso … E incluso entonces, ¿estás adoptando un proyecto anterior?

Mi carrera ha implicado mucho uso de la línea de comandos y me encanta, pero es porque los proyectos en los que he trabajado tienen componentes que usan lenguajes de shell. Este puede o no ser el caso para los proyectos en los que está trabajando.

Tenga en cuenta que cuando usa computadoras en general, no solo como ingeniero de software, conociendo la línea de comando o PowerShell, y poder ejecutar el script a menudo le dará más control sobre el sistema que lo que proporciona la GUI sola.

La estructura de su pregunta es como preguntar:
– ¿Puedo alcanzar ese
– sin alcanzar .

Probémoslo en otros dominios:
¿Puedo ser sin
¿Puedo ser sin
¿Puedo ser sin

Deberías poder responder por ti mismo. Aprender la sintaxis de la línea de comandos es fácil. Mucho más fácil que los de lenguaje de programación. Claro que puede no ser necesario, pero encontrarás muchos bloqueos más difíciles en el camino que es poco probable.

Quizás pero no con esa actitud. “¿Puedo ser X sin hacer Y?” No es la actitud de excelencia. En su lugar, debería decir: “Haré lo que sea necesario para lograr X. ¿Cómo puede ayudar el aprendizaje de Y?”

Evite la conversación con Linus Torvalds. 🙂