¿Por qué es importante la experiencia en ingeniería de software?

La experiencia te enseña la diferencia entre buenas ideas y malas ideas que parecen tener sentido.

Sin experiencia no puede saber cuándo su plan “brillante” tendrá consecuencias desastrosas.

La experiencia se acumula al cometer errores y comprender dónde te equivocaste.

Uno de mis ejemplos favoritos que he visto una y otra vez es poner la configuración de la aplicación en la base de datos, para sistemas internos.

Así es como funcionan muchos de los principales sistemas de software libre, por lo que debe ser una buena idea, ¿verdad?

INCORRECTO. El problema es que, a menos que tenga mucho cuidado de colocar los ajustes de configuración en una base de datos diferente, que no se migra con el resto del sistema, terminará migrando sus ajustes de configuración.

Esto lleva a una situación desastrosa en la que tiene que migrar todo y luego actualizar la configuración original. Aún más complejo si su esquema de configuración ha cambiado significativamente entre versiones.

La migración se convierte en una serie costosa de ensayos de vestimenta y en un proceso de día completo.

Los sistemas que mantienen la configuración separada, preferiblemente en un archivo plano simple, son mucho más fáciles de migrar.

¿Por qué los grandes sistemas de código abierto eligen este enfoque si es tan malo?

La razón es que obtienen sus ensayos de vestimenta de forma gratuita: cientos de voluntarios aplican versiones beta e informan defectos.

Porque si puede permitirse todos esos ensayos de vestimenta, que son absolutamente necesarios si está implementando millones de sistemas, en lugar de un puñado de servidores internos, una base de datos de configuración integrada es una buena solución.

La experiencia es importante en todas las disciplinas de ingeniería y artesanía, no solo en ingeniería de software. Pero como usted preguntó sobre ingeniería de software, aquí hay tres cosas que la experiencia proporciona que la educación no puede.

Generalización. La escuela y la observación solo llegan muy lejos. Podría enseñarle qué herramientas se necesitan para resolver un problema muy específico, como escribir una interfaz de usuario para una base de datos con SQL Server que utilizarán 100 personas. Se necesita experiencia para generalizar esos procesos, para saber cuándo se aplican y cuándo no. No hay una buena forma formal de comunicar estos límites que se puedan aplicar a la diversidad de problemas que se presentan en el mundo: debe experimentarlos.

Evitación de riesgos . Hay un conjunto de errores que todos cometen al aprender a programar en un dominio o idioma determinado. Es un hecho de la vida. Habrá un centenar de errores comunes, y podrías cometer una docena de ellos. A veces, estos errores son arquitectónicos y cuestan cientos o miles de horas de trabajo por persona. Una persona experimentada ya ha cometido sus errores y es poco probable que haga tantos trabajando en ese dominio. Si necesita el software de mejor calidad, encontrará a alguien con experiencia en el dominio en el que trabajarán para escribir o al menos coordinar ese software.

Especialización Las clases y la instrucción tienden a cubrir amplias franjas de territorio. Por ejemplo, es posible que pueda obtener un semestre completo de clases relacionadas con el diseño del compilador, digamos 600 horas de trabajo de curso y tarea. Alguien que ha estado trabajando en compiladores durante 10 años tendrá 20,000 horas de experiencia en ese dominio. ¿Quién sabe más sobre los entresijos de los compiladores?

La educación es útil como punto de partida para una carrera, y proporciona un marco para organizar su experiencia. Pero la experiencia es, en última instancia, lo que te hace un buen ingeniero.

Si no estás aprendiendo en el camino, la experiencia no es importante. Incluso si usted es un gran programador, la mayoría de los SW están integrados en equipos, y la dinámica de los equipos en torno a la construcción de un gran proyecto cambia sustancialmente la forma en que se construye el software (subestimación).

Sin embargo, después de trabajar en ingeniería de software, encontrará patrones y patrones de hormigas y formas de hacer cosas que le hagan golpearse la frente … y probablemente de manera regular. También será MUCHO mejor en la estimación … y en la capacidad de comunicar la confianza de una estimación (eventualmente cualquier tarea que lleve más de una semana será … necesitamos hacer una investigación de 2 a 4 días y desglosarla antes de que podamos comenzar) . Esto sucede más rápido si te unes a grupos y aprendes de los errores de otras personas. Recuerde, hay costos excesivos de tiempo y tiempo al producir automóviles y aviones, y no están creando nada sobre la marcha, están armando piezas que ya se construyeron.

Esto (ocasionalmente) también ocurre a nivel de empresa (una de las razones por las que encuentro que el cambio de trabajo cada 18 meses a 2 años es inquietante, y el bloqueo salarial que las empresas imponen a los empleados a largo plazo es desmesurado).

1 de cada 6 proyectos de TI tiene un exceso de costos del 200% y un exceso de tiempo del 70%, una gran cantidad de proyectos fracasan … entender por qué y poder informar a las personas que tienen un proyecto loco (si están dispuestos a escuchar) … ser capaz de ver problemas al inicio de un proyecto (y hacer algo al respecto) son cosas que la gente experimentada de SW puede hacer (si tienen una gestión responsable … lo que ciertamente no es el caso todo el tiempo)

En primer lugar, ¿qué es la experiencia? Tienes experiencia en algo, si experimentaste algo similar en el pasado. A partir de las situaciones que conoció en el pasado, podrá sacar conclusiones para el presente y el futuro. La experiencia lo protegerá de decisiones incorrectas: ha tomado esas decisiones incorrectas en el pasado, no las volverá a hacer (como es probable). Su experiencia aumentará sus posibilidades de éxito en el presente y el futuro. Te hará más rápido y más preciso.

Por lo tanto, la experiencia es importante en cualquier tipo de campo / situación.

Ahora en Ingeniería de Software. Es un campo muy complejo. La ingeniería de software es costosa, tanto en tiempo como en dinero. Además, implica un alto riesgo de falla (total).

Contratar a un desarrollador experimentado reduce el riesgo de falla (total) del proyecto. Es por eso que un desarrollador experimentado vale mucho dinero. Un salario alto generalmente viene a la fracción del costo de un proyecto fallido. ¡Esto puede costar miles de millones de dólares! Hubo numerosos ejemplos en el pasado.

  • La experiencia te dice de lo que eres capaz. ¿Alguna vez saltaste por un estrecho espacio entre dos edificios altos? Si no lo ha hecho, probablemente mirará la distancia y pensará que no vale la pena arriesgarse. Si es así, sabe hasta dónde puede saltar, y puede acercarse a una situación dada sabiendo cuál será el resultado. ¿Alguna vez hiciste una inmersión para atrapar una pelota? Si no, parece que realmente duele, y probablemente no lo intentes. Pero si ha practicado, tal vez en una colchoneta en el gimnasio, descubre que puede hacerlo razonablemente seguro. La experiencia te da confianza sobre las cosas que puedes hacer. Cuando alguien le muestra un problema difícil, el nuevo graduado puede pensar: “Guau, eso es demasiado difícil para mí”. Una vez que haya resuelto un problema difícil, se dará cuenta de que puede hacerlo si simplemente se arremanga y Ponte a trabajar.
  • La experiencia te brinda una especie de “memoria muscular” intelectual de las cosas que has resuelto antes. Escribir una búsqueda binaria o una lista doblemente vinculada es mucho más fácil la décima vez que lo hace que la primera vez.
  • La experiencia te dice dónde están las trampas y cómo se ven. Es difícil ver todos los posibles problemas por delante hasta que hayas caído en algunos pozos y salgas de las arenas movedizas varias veces. Al final de su carrera, verá problemas para llegar a diez millas de distancia. De esa manera solo caes en unos pocos hoyos :-).

¿Confiaría en usted mismo en un cirujano cardíaco que solo aprendió de los libros y nunca practicó o fue entrenado por un cirujano experimentado para hacerle un trasplante de corazón? Yo no lo haría. La misma razón, no confiaría en un ingeniero sw sin experiencia. Puede parecer que lo hago, pero tengo 4 o 5 planes de respaldo en caso de que él / ella se equivoque.

Déjame darte un ejemplo, tenía a alguien entrenando debajo de mí y él era un poco arrogante y lo sabía todo. Le dije que debería respaldar su trabajo solo para estar seguro. Se rió y dijo que nada saldrá mal. La mañana del día del lanzamiento, estaba haciendo cambios (algo que le dije que no debía hacer) y eliminó la base de datos. Se puso “blanco”. Lo que él no sabía era que estaba haciendo una copia de seguridad de todo y había revertido todos los cambios no probados esa mañana.

Le dejé que se preguntara qué le iba a decir al CIO durante toda la mañana y le conté sobre la copia de seguridad en el almuerzo.

Al igual que cualquier otro campo que implique mucho conocimiento, la experiencia en ingeniería de software es importante porque le enseña las mejores formas de aplicar ese conocimiento al trabajar en problemas del mundo real.

Gran parte del trabajo de un ingeniero de software es responder la pregunta, ¿qué hacemos ahora? Tal vez estás tratando de corregir un error y tratando de averiguar qué verificar a continuación. Quizás esté desarrollando una nueva característica y necesite tomar una decisión sobre la interfaz de usuario o el almacenamiento en caché o el esquema de la base de datos.

En cualquier caso, avanzará con mayor confianza y (con suerte) éxito si su decisión está informada por su experiencia de lo que ha funcionado y no en situaciones similares en el pasado.

Porque hay mucho que es importante para hacer el trabajo que no se puede aprender leyendo libros o tomando cursos. Específicamente, la comunicación efectiva a menudo puede ser mucho más importante que otras cosas.

¿Qué es la experiencia? No es solo la cantidad de tiempo que alguien ha trabajado. Más que nada, la experiencia es la suma total de todos los errores que alguien ya ha cometido en el pasado. Lo que hace que un ingeniero experimentado sea mejor en su trabajo que un ingeniero recién salido de la escuela es que el ingeniero experimentado ha cometido muchos años de errores y, con suerte, aprendió de ellos. El nuevo ingeniero todavía tiene muchos errores que cometer, y la compañía tendrá que vivir con eso.

Por supuesto, si el ingeniero experimentado no ha aprendido nada de sus errores, esa es una historia diferente.

Por la misma razón, la experiencia es importante en la vida. Nos da conocimiento de lo que funciona y lo que no funciona. Puedes estudiar y aprender, pero solo lo sabes por experiencia.

Definitivamente de acuerdo con los demás.

Me gustaría agregar que solo obtienes más comodidad al ser un ingeniero de software más senior.

Te acostumbras a trabajar con el código de otras personas y aprendes cómo funcionar como parte de un equipo. No sobrevivirás en el campo si no puedes desarrollar esas habilidades.

¡Buena suerte!

La experiencia es importante en todo.

El reconocimiento de patrones es experiencia. No es el reconocimiento de buenos patrones. Pero el reconocimiento de patrones que conducen a la mierda del toro.

La mayoría de los profesionales hacen lo último. La inversión inicial funciona de esta manera. El inversor que busca patrones positivos pierde. El inversor que busca mierda de toro gana.

El mismo principio se aplica con la experiencia. La experiencia te enseña la diferencia entre la mierda de toro y algo real.

El ingeniero profesional, el vendedor y el abogado saben cómo es la mierda y corren. A los aficionados les encanta revolcarse y beber mierda de toro.

Una empresa quiere que tengas experiencia para que no tengan que pasar tiempo entrenándote en lo básico. Quieren que puedas reconocer la mierda del toro cuando se trata.

En pocas palabras, hay un millón de formas de obtener experiencia. Ve por un montón de mierda de toro y luego obtienes una nariz para lo que es real y lo que es mierda de toro.

La experiencia es importante en ingeniería de software o en cualquier profesión. Las empresas tienden a contratar candidatos “prácticos”.

More Interesting

¿Qué diferentes variedades de trabajos están disponibles para un graduado de ciencias de la computación si no quieren ingresar al mundo corporativo?

¿Contratarás a alguien como desarrollador de software con una licenciatura en informática de la UOPeople (Universidad del Pueblo)?

¿Qué consejo le darás a un ingeniero de software con experiencia de 9 años que nunca tuvo la oportunidad de ir al extranjero para trabajar?

¿Cuál podría ser el currículum vitae / CV (o plantilla) de muestra para 4 meses-1 año de experiencia Ingeniero de software?

¿Qué debe incluir una cartera de redacción técnica?

¿Qué presión de trabajo común enfrentan normalmente los ingenieros y programadores de software?

¿Cuál es el mejor trabajo para tener suficiente tiempo libre para concentrarse en el inicio de su software?

Estoy más fresco y tengo dos ofertas de trabajo: una en una startup que realiza análisis y otra en una gran compañía de software conocida como desarrollador de Java. ¿Cual deberia elegir?

Llegué tarde a la programación, ¿cuánto tiempo necesito pasar para convertirme en desarrollador de software?

¿Debo abandonar la idea de convertirme en ingeniero / programador de software, porque no tengo un título universitario en ese campo?

Ya no quiero ser ingeniero de software. ¿Cuáles son algunas habilidades transferibles?

Estoy trabajando como ingeniero de software en Gurgaon, India, ¿qué otras cosas puedo hacer lado a lado para tener otra fuente de ingresos aparte de FD, fondos mutuos, inversiones de capital? No tengo mucho capital.

¿Por qué los libertarios son tan prominentes entre los ingenieros de software estadounidenses?

¿Cuál es el mejor consejo para la entrevista de trabajo de ingeniería de software?

Como ingeniero de software, ¿qué haces realmente?