¿Es posible que alguien sea experto en todas las áreas del desarrollo de software, que incluye bases de datos, backend, interfaz web, aplicaciones móviles y diseño gráfico?

Me haría eco de lo que dice Simon Willison, en el sentido de que alguien puede ser bastante bueno en todos esos aspectos del desarrollo orientado a la web. Sin embargo, el problema con el “experto” es que cuanto más sabes sobre un tema, más te das cuenta de que no sabes.

También está la cuestión de mantenerse al día con los nuevos desarrollos. Puede ser “experto” (para diversos grados de “experto”) en un dominio, pero necesita mantenerse al día para seguir siendo un experto. Hacer eso en varios dominios, en un campo que se vuelve cada vez más complicado y diversificado, es muy difícil.

Y también, debido a que el campo está cada vez más diversificado, es cada vez más difícil ser “experto” en uno solo de estos dominios. En la década de 1990, no había muchas opciones para el código de desarrollo de back-end: probablemente solo necesitaría ser experto en Perl. En la actualidad, puede elegir entre PHP, Ruby, Python, varios otros lenguajes, una gran variedad de bibliotecas para cada uno y muchos marcos diferentes para crear sitios web a partir de ellos. Si su definición de “experto” era particularmente estricta, ¡podría decir que solo puede ser “experto” en un idioma y marco!

Utilizándome a mí mismo como ejemplo … Me las arreglé para ser bastante “full stack”: más de diez años de trabajo independiente trabajé en el desarrollo de backend (PHP y Python (Django), y desde entonces he empezado a familiarizarme con Ruby on Rails básico), usando MySQL y Postgres (suficiente para construir sitios y escribir consultas, pero no para hacer más que una optimización básica, o para saber cómo escalarlos), y he hecho mucho HTML, CSS y JavaScript cada vez más complicado. También he realizado trabajos relacionados con la Arquitectura de la información (estructura y organización de sitios de planificación) y UI / UX (cómo debería funcionar bien para los usuarios).

Diría que soy bastante bueno en la mayor parte de eso, en diversos grados, pero hay muchas personas que son mucho mejores en todos ellos. Además, no tengo una idea real de cómo hacer las cosas reales de las operaciones de back-end del núcleo (configuración del software y hardware para servidores, cómo escalar cosas, etc.). Y, aunque mi experiencia original era en diseño, no soy muy bueno al final del diseño gráfico; Puedo hacer que las cosas funcionen bien (UI / UX), pero encontrarlas hermosas (diseño gráfico) es extremadamente difícil / imposible.

Constantemente siento que me estoy esforzando para mantener a la vista a los “expertos” en cualquiera de los campos en los que siento que “no estoy mal”, y dada la creciente diversificación de todos los campos, creo que ‘ ¡Solo me estoy quedando atrás!

Una vez escrito eso, diría que no, no se puede ser “experto” en todos los campos, para cualquier uso significativo de la palabra. Puedes ser competente, o no estar mal, en muchos de ellos, tal vez incluso en todos, pero siempre habrá muchas personas que sean mejores que tú en cualquiera de ellos.

No es posible que alguien sea experto en “todos” los aspectos del desarrollo de software, eso incluiría todo, desde escribir sistemas de control crítico de seguridad para centrales nucleares en Fortran hasta algoritmos comerciales de alta frecuencia en Wall Street. El mundo del desarrollo de software es simplemente demasiado grande para eso ahora.

Es posible que alguien se convierta en un experto en “bases de datos, backend, interfaz web, aplicaciones móviles y diseño gráfico”. Los programadores que se destacan en todos aquellos con la excepción del diseño gráfico a veces se conocen como desarrolladores “full stack”, aunque las aplicaciones móviles suelen ser una especialidad separada.

Las personas que también se destacan en diseño gráfico existen pero son muy raras. ¡He conocido algunos y siempre estoy muy celoso de ellos!

Por supuesto, esta respuesta varía según cómo defina la palabra “experto”.

Sí, es posible en las áreas que especifique que parecen centrarse en el desarrollo de software web, pero esa experiencia múltiple tiende a reducirse en torno a lenguajes y / o plataformas específicos.

Por ejemplo, tengo varios grados de experiencia en SQL, JS, C # y programación general frontend / backend, pero no me pidas que haga un proyecto Scala / CloudDB / Meteor en una semana. Una gran parte se convierte en superar las diversas curvas de aprendizaje de los conjuntos de herramientas / plataformas, no tanto los problemas generales de la arquitectura de software que realmente se reducen a lo mismo, incluso con aplicaciones como el front-end. Por lo tanto, en general, siempre que uno se concentre en un combo de “pila completa” favorito, probablemente podría llegar a ser un experto en todas las capas de componentes.

Las habilidades extrañas (y, por lo tanto, el gráfico de arriba) son probablemente diseño y gráficos frontales muy orientados a los gráficos, donde hay más cosas del cerebro derecho / cerebro izquierdo sucediendo. Pasar de una tarea de mapeo de base de datos puramente backend es muy diferente a descubrir por qué su caja flexible flexible se está rompiendo a 400 píxeles … o cómo obtener la paleta de colores correcta en su diseño general … Personalmente, me encanta ir y venir, pero muchos desarrolladores no.

Dicho esto, probablemente hay quienes se llamarían a sí mismos expertos no solo a través de las pilas sino también a través de plataformas y marcos, pero voy a decir que incluso esta subárea de desarrollo de software está llena de tantos marcos, herramientas y herramientas nuevas. ¡incluso nuevos idiomas, que tal dominio “total” solo es bueno durante aproximadamente un mes en estos días!

Un buen programador piensa como programador, el lenguaje para la expresión de sus pensamientos es menos importante: siempre se puede aprender la sintaxis y las reglas.

Evaluación técnica de desarrolladores de software.

Por favor, perdona mi “entrometimiento” en esta pregunta …

Solo me gustaría decir algo que considero un malentendido bastante común en el campo del desarrollo de software.

En resumen, el desarrollo web y móvil no es en absoluto la totalidad de la ingeniería de software. Nunca lo he hecho tampoco, sin embargo, sigo siendo un programador muy exitoso con un salario muy bueno y una demanda muy alta, y lo he sido por más de 40 años.

Y, por cierto, no estoy haciendo un “trabajo heredado” usando idiomas antiguos como COBOL de lo que estoy hablando. Estoy involucrado en algunos de los trabajos más vanguardistas del siglo XXI que existen.

Muy a menudo veo desarrolladores más jóvenes que no saben nada más sobre la web y los dispositivos móviles. Estos desarrolladores creen que la web y los dispositivos móviles (y tal vez el escritorio de Linux y Windows) es todo lo que hay (o todo lo que importa). Esto no podría estar mas alejado de la verdad.

Entonces, ciertamente no estoy aquí para decir que un área de ingeniería de software es mejor que la otra; lo que digo es que harías bien en abrir los ojos y la mente y ver esa web y dispositivos móviles (y tal vez PC) ni siquiera está cerca de ser la totalidad de la ingeniería de software: hay mucho más código en el mundo que hace cosas que probablemente nunca habías pensado, en plataformas que nunca supiste que existían.

El mundo entero del software no consiste en “front-end y / o back-end”, ni siquiera cerca.