Sobre las habilidades organizativas y la ciencia aplicada de unir muchas cosas en el oficio de la ingeniería de software

Hace algunas semanas, una persona brillante volvió a publicar en Hacker News una publicación bien pensada y concisa sobre la habilidad más importante en el desarrollo de software. En esta publicación, John D. Cook señaló una cita del artículo Las habilidades organizativas superan a la magia algorítmica, de James Hague. Ambos autores abordan el tema de la ingeniería de software de la organización como una habilidad . Contrastan esto con eldominio de la informática probado en entrevistas, enseñado en el ámbito académico o promocionado en publicaciones de blogs. Su contemplación me hizo reflexionar sobre cómo podría mejorarse nuestro oficio.
Pensando profundamente en los mensajes de ambos autores, repasé mis propias experiencias a lo largo del tiempo. Siento empatía con aquellos que experimentan entrevistas técnicas que no tienen una formación clásica. Mi última experiencia hace algunos años fue desorganizada.
Mi último proyecto profesional completado fue un sistema de tres años que se ocupaba de la complejidad del código y una línea de productos sin fin. Luchamos con valentía para organizar el creciente lío. Ambos pensamientos tenían un hilo conductor, ya que eran pequeños y grandes ejercicios de organización. Giraban en torno a sentimientos de ansiedad, vulnerabilidad, estrés y momentos felices. Me (nos) preocupamos profundamente por los resultados.
Esto me motivó a escribir un seguimiento a mi manera. Esto se debe a que me conmovió la gravedad de estas publicaciones. ¿Por qué no responder a las preguntas planteadas incluso si mi respuesta de ejemplo no coincide claramente? Así que le di una patada a la idea y me quedé con una pregunta. John preguntó:
... ¿cómo presenta una organización inteligente?Pensando un poco en esto, aparté la mirada de la pantalla y vi mi pizarra frente a mí. Mi cabeza se arremolinaba alrededor de los postes. ¿Difíciles entrevistas técnicas? ¿Organización? ¿Gestión del estado? ¿Colapsando peso? ¿Complejidad del código? Quizás el ejercicio de pizarra de entrevistas técnicas podría resultar un punto destacado de la ingeniería de software desde el principio.
Entonces comencé a resolver algunos problemas típicos en la pizarra, nerviosamente, solo.
Rara vez alguien se desempeña bien en una pizarra. Tienes que mostrar un proceso de pensamiento magistral y tener mucho en tu cabeza. Tienes que comunicarte, pero ¿cómo te comunicas mientras ignoras la voz gritando en tu cabeza que dice "apúrate!" mientras se mueve con entusiasmo?
Un mejor enfoque
En empresas técnicas grandes y pequeñas, hay entrevistas técnicas de pizarra. Lo colocan en una sala blanca con una pizarra con otra persona que representa a la empresa. Él o ella hace una pregunta y se nos invita a resolver el problema. Entonces, por lo general, depende del entrevistado llevar el problema a una solución.
Aquí es donde mi cabeza comienza a dar vueltas fuera de control debido a la ansiedad y la desorganización. Las trompetas comienzan a sonar en mi cabeza y mi proceso de pensamiento se estropea. El tiempo se acelera. Mi visión se estrecha y me mareo.
Tal vez haya una manera de frenar, acelerar y caminar a través de un proceso con organización . Algo que nunca había visto antes al entrevistar candidatos a lo largo de mis años, pero tal vez pueda ayudar a aliviar los nervios y convertirla en una experiencia agradable. Primero, mire el tablero y córtelo en tres secciones.

Las tres secciones se organizarán como espacio temporal para trabajar en la resolución del problema.
Paso 1: el problema
Asegúrese de escribir el problema en una oración completa en la parte superior. Esto te hará sentir el marcador y te ayudará a superar el golpe inicial de "¿cómo puedo resolver esto?"

Una vez que haya escrito la pregunta, mírela por un momento y comience a pensar en preguntas. Dibuja las líneas con un amplio espacio. No se preocupe por la pausa, déjele saber al entrevistador que está pensando en preguntas para hacer.
Paso 2: supuestos
Piense en algunas preguntas genéricas. ¿Qué lenguaje de programación prefieres? Muévete al lado derecho del tablero. ¿No vienen preguntas? El problema puede contener conceptos que no conoce. Pregunte cuáles son. Luego, comience a abordar las preguntas del problema. Los primeros en preguntar son qué es un ejemplo de entrada y salida de parámetros . Pregunte si los datos están clasificados previamente.

Aclarar los supuestos puede simplificar el problema. Al hacer cada pregunta, debe escribir cada par de respuestas en el área de supuestos. Cuando reciba respuestas, obtenga un marcador secundario (de un color diferente) para resaltar la respuesta. Llevar sus propios marcadores puede ayudar.
Solo podemos tener tantos elementos en nuestra cabeza, así que apóyate mucho en la pizarra para capturar todo el conocimiento. Escribir las preguntas y respuestas ralentizará su enfoque para que sea digerible.
Paso 3: el enfoque
Una vez que tenga una buena cantidad de preguntas en el lado derecho del tablero, muévase físicamente hacia la izquierda. Aquí es donde comenzaremos a discutir un enfoque para nuestra solución.

Aquí, se producen visualizaciones, pasos y pseudocódigo muy aproximados. Hágale saber a su entrevistador que esta no es su implementación, sino un lugar donde está organizando sus pensamientos sobre la estrategia y el enfoque, libremente sobre estructuras de datos y tipos de datos abstractos. Dibuja la solución como si fuera una imagen.
El cuadro de la izquierda demostrará algo muy interesante en el sentido de que debería revelar lagunas en nuestras preguntas. Mientras escribe y piensa en su enfoque, detenga su proceso de pensamiento si no se responde una pregunta. Vuelva a la sección correcta, escriba la pregunta y trate de recibir la respuesta.
Como mínimo, esto sucederá varias veces a medida que reconozca los casos promedio, los mejores y los peores casos . Depende de la estrategia, los límites y las limitaciones. Solicite relajación en el enfoque como "Para este ejemplo, ¿puedo usar un pequeño conjunto de datos?" "¿Puedo asumir que la matriz de entrada está ordenada?" La validación de entrada también es otro generador de preguntas.
Paso 4: implementación del código
Una vez que se generan suficientes suposiciones y material de enfoque, esto significa que ahora está listo para escribir su código de implementación con confianza. Serás apoyado por ambos lados. Resalte y señale cada paso mientras escribe el código. Pase con cuidado por el enfoque, que se encuentra a su izquierda. Mientras escribe su implementación, vaya y venga comprobando las suposiciones.
Incluso si luchas con la solución, eres el mago de la organización.

Por supuesto, existe la posibilidad de encontrar algo en el acto. Camine de regreso a la izquierda y reactive la aproximación se rompa y pida ayuda. Surgen nuevas preguntas. Ve a la derecha. Avanza y retrocede de izquierda a derecha al centro hasta que lo consigas. Vas a.
Sea el maestro de la organización. Si choca contra una pared o encuentra algo que no está bien, recuerde que los lados lo guiarán.
Paso de bonificación 5: prueba
Si ha completado el ejercicio con el código que cree que funciona, dé el primer paso para analizar cómo se debe probar. Use la sección de suposiciones como un lugar para escribir código de prueba limpio, si debe elegir hacerlo.

Por ahora, lo más probable es que elimine todas las preguntas de esta área. Borre las preguntas e intente escribir pruebas unitarias. Al final, estarás bien porque te organizaste con confianza.
Para resumir
Ahí tienes. Fueron unos minutos de pura organización sin mucha teoría. Se apoya en algunos conceptos simples.
- Seccionamiento -cortando el problema en pedazos de principio a fin.
- Andamio : el concepto de arquitectura temporal o donde instalamos una estructura de soporte mientras construimos a nuestro alrededor.
- Gating : no debemos seguir adelante con el siguiente paso hasta que estemos cómodos y confiados en los asuntos de abordar bien el problema. Muestre confianza pero participe activamente con "¿Perdí alguna suposición?" o "¿Mi enfoque tiene agujeros?" antes de continuar.
- Estado : la organización se maneja visualmente para mantener la complejidad de ponderación del problema. Evite usar una goma de borrar si puede.

Conclusión
Quería terminar con algunas cositas que traerán mi proceso de pensamiento a casa.
No puedes apreciar una hazaña de organización hasta que experimentes la desorganización. - JohnEstoy de acuerdo. Esto se aplica a cualquier experiencia humana, incluidos proyectos con código, personas y esas experiencias de pizarra técnica. Pero dar un paso atrás y responder al problema con un proceso de organización es una hazaña de ingeniería. Un problema y una posible solución.
La clave de la ingeniería es la organización potencial . Una gran energía cinética proviene del acto de organizarse astuta y continuamente en el tiempo.Nunca subestimes este fenómeno.
Solo si el desorden desorganizado es su responsabilidad, algo que significa más para usted que un estudio de caso, puede comprenderlo y apreciar las mejoras. - JohnTodos tenemos una historia sobre la pizarra. Quería descubrir cómo podía mejorar y poner a prueba mi mente de ingeniería al mismo tiempo. Muchos ingenieros se conectan emocionalmente en la pizarra. Todos tenemos historias de malditas derrotas.
La mayor parte de nuestro oficio es una ciencia aplicada. En raras ocasiones, los superdotados pueden manipular y manipular para inventar nuevas estructuras de datos o algoritmos. El nuestro es un lenguaje de patrones y un oficio . Rara vez es arte, si es que alguna vez lo es. Tiene mucho que haceridentificando la última habilidad organizativa y despegando y pegando las cosas muy bien, repetidamente. Quizás con algunas herramientas fuera de la caja de herramientas. Pero cuidado con las herramientas de organización que nos imponen un intercambio o un entusiasmo.
Recuerde, es un orgullo mejorar el código a través de la organización y la estructura. He escrito algunas publicaciones sobre organización y el tema que vincula la organización con la complejidad del sistema. Existe un vínculo fuerte. Por eso aprecié profundamente los pensamientos de John y James. Son mensajes organizados sin prisas de caducidad de tiempo.

Si se encuentra en esta situación, solicite una pizarra más grande.