Joel Spolsky: Nivel de abstracción para desarrolladores

imagen

11 de abril de 2006

Un joven llega a la ciudad. Se ve bien y tiene algo de dinero en el bolsillo, es fácil para él encontrar un lenguaje común con las mujeres.

Habla poco de su pasado, pero es obvio que pasó mucho tiempo en una gran compañía sin alma.

Es ciertamente amigable y sociable, tranquilo y confiado, no arrogante. Por lo tanto, puede llevar un poco de trabajo del tablón de anuncios en el Café local para programadores. Pero rápidamente pierde interés en proyectos de bases de datos de seguros, páginas web para amas de casa y motores de liquidación financiera.

Un año después, calculó que había acumulado suficiente dinero para pagar sus modestos gastos del año. Por lo tanto, después de consultar con su fiel pastor alemán, coloca la computadora en una habitación bañada por el sol, en un departamento alquilado e instala herramientas cuidadosamente seleccionadas para el trabajo.

Y se sienta a escribir código.

¿Y qué código es? Impecable, artístico, elegante, sin errores. La interfaz de usuario imita el proceso de pensamiento de una persona tan bien que las personas a quienes les muestra el código en el Café para programadores apenas notan la interfaz de usuario. Este es un trabajo brillante.

Inspirado por los comentarios de sus colegas, comienza a dedicarse a los negocios y se está preparando para recibir pedidos. Su modestia descarta cualquier reclamo, y después de un mes la situación en su cuenta bancaria no parece tan alentadora. Hasta ahora, solo se han aceptado tres órdenes: una de la madre, otra del benefactor anónimo en el Café de Programadores, y una presentada por él para probar el sistema de comercio.

En el segundo mes, los pedidos ya no llegan.

Lo sorprende y lo molesta. En una gran empresa, los nuevos productos se creaban regularmente, e incluso si eran groseros y discretos, todavía se vendían en cantidades razonables. Un producto en el que trabajó fue un gran éxito.

Después de varios meses, su situación financiera comienza a verse un poco inestable. El perro lo mira con tristeza. Sin entender lo que estaba sucediendo, pero al ver que su cara se ve peor de lo habitual y parece incapaz de ganar fuerzas para salir con amigos, ir de compras para reponer suministros o incluso nadar.

Una mañana, un vendedor local se negó a extender su deuda, y su banquero no había atendido el teléfono durante mucho tiempo.

Una gran empresa no es vengativa. Reconocen a un empleado talentoso y están felices de contratarlo con un salario más alto. Pronto se ve mejor, tiene ropa nueva y recuperó su antigua confianza en sí mismo. Pero falta algo. Una chispa en sus ojos. La esperanza de poder convertirse en el dueño de su destino había desaparecido.

¿Por qué no tuvo éxito? Seguro que lo sabe. "Comercialización", dice. Al igual que muchos expertos técnicos jóvenes, se inclina a decir cosas como: "Microsoft tiene productos peores, pero un mejor marketing".

El término "marketing", pronunciado por un desarrollador de software, simplemente significa todos estos problemas comerciales: todo lo que realmente no entienden al crear software y venderlo.

De hecho, esto no es exactamente lo que significa marketing. Microsoft tiene un marketing bastante terrible. ¿Te imaginas que después de este anuncio de dinosaurios alguien realmente quiere comprar Microsoft Office?

El software es una conversación entre un desarrollador de software y un usuario. Pero para que esta conversación tenga lugar, se necesita mucho trabajo que va más allá del desarrollo de software. Esto requiere no solo marketing, sino también ventas y relaciones públicas, y oficina, y red, e infraestructura, y aire acondicionado en la oficina, y servicio al cliente, y contabilidad, y un montón de otras tareas de soporte.

Pero, ¿qué hacen los desarrolladores de software? Diseñan y escriben código, simulan pantallas, depuran, integran y prueban cosas en el repositorio de control de código fuente.

El nivel en el que trabaja un programador (digamos Emacs) es demasiado abstracto para soportar un negocio. Los desarrolladores que trabajan en el nivel de abstracción necesitan una capa de implementación, una organización que tome su código y lo convierta en productos. Dolly Parton, que trabaja en el nivel de "cantar una buena canción", también necesita una gran capa de implementación para grabar y reservar salas de conciertos, tomar boletos e instalar equipos de audio, así como promover grabaciones y cobrar tarifas.

Cualquier empresa de software exitosa consistirá en una capa delgada de desarrolladores de software distribuidos en la parte superior de una gran estructura administrativa abstracta.

La abstracción existe únicamente para crear la ilusión de que las actividades diarias de un programador (diseño y escritura de código, verificación de código, depuración, etc.) son todo lo que se requiere para crear productos de software y llevarlos al mercado. Lo que me lleva al punto más importante de este ensayo:
Su primer paso como gerente del equipo de desarrollo de software es crear una capa de desarrollo abstracta.

La mayoría de los nuevos administradores de software omiten este punto. Continúan pensando en el modelo tradicional de gestión de comando y conquista que aprendieron en las películas de Hollywood.

De acuerdo con Command-and-Conquer (Estado Mayor), los ejecutivos descubren a dónde irá el negocio y luego dan las órdenes apropiadas a sus lugartenientes para mover el negocio en esta dirección. Sus lugartenientes, a su vez, dividen las tareas en partes más pequeñas y dan órdenes para su implementación. Esto continúa hacia abajo en el organigrama hasta que, al final, alguien a continuación hace algo de trabajo. En este modelo, el programador es un diente en el automóvil: el conductor que realiza una parte de las órdenes del manual.

Algunas empresas realmente toman esta ruta. Siempre puede averiguar cuándo se trata de un negocio así, porque la persona con la que está hablando está haciendo algo sin sentido y él lo sabe, incluso puede preocuparse por eso, pero no pueden hacer nada al respecto. Esta es una aerolínea que pierde un millón de millas de un cliente para siempre, porque se niegan a cambiar su boleto irrevocable, porque no pudo volar por razones familiares. Este es un proveedor de Internet cuyo servicio funciona peor y peor, y cuando cancela su cuenta, le siguen facturando, cuando llama para quejarse, debe llamar a un número pagado y esperar una hora, y luego se niegan a devolverle dinero hasta que comiences un blog sobre cuánto apestan. Este es un fabricante de automóviles de Detroit que hace mucho que olvidócómo crear autos que la gente quiera comprar y, en cambio, cambiar de una estrategia de mercado a una estrategia publicitaria, como si la única razón por la que no compramos sus autos basura es porque el descuento no es lo suficientemente grande.

Suficiente

Olvídate de eso. Se probó un sistema jerárquico de comando y control, que funcionó durante algún tiempo en la década de 1920, compitiendo con empujar carros, pero no es lo suficientemente bueno para el siglo XXI. Los fabricantes de software deben usar un modelo diferente.

En una compañía de software, la primera prioridad de la administración debe ser crear esta abstracción para los programadores.

Si en algún lugar un programador está preocupado por una silla rota o está esperando una respuesta de Dell para ordenar una nueva computadora, entonces la abstracción se ha filtrado.

Piense en la capa abstracta de su desarrollo como un yate grande y hermoso con motores increíblemente potentes. Se mantiene impecablemente. Los platos gourmet siempre se sirven como un reloj. Las criadas trabajan dos veces al día en cabañas. Las cartas de navegación están siempre actualizadas. El GPS y el radar siempre funcionan, y si se rompen, hay un repuesto debajo de la plataforma. De pie en el puente, tienes programadores que realmente solo piensan en la velocidad, la dirección y lo que sucederá durante el almuerzo: ¿atún o salmón? Mientras tanto, un gran equipo de profesionales con un uniforme blanco almidonado de puntillas girando debajo de la cubierta, manteniendo todo en buen estado, llenando los cilindros de gas, raspando las conchas marinas, alisando las servilletas sobre la mesa. El personal de soporte sabe qué hacer, pero toman sus señales de su anciano salado,quien asiente levemente en ciertas direcciones para coordinar toda la sinfonía para que los programadores puedan abstraerse de todo lo que concierne al yate, excepto la velocidad, la dirección y lo que desean para el almuerzo.

La administración de una compañía de software es la principal responsable de crear abstracciones para los programadores. Construimos un yate, servimos un yate, somos un yate, pero no operamos un yate. Todo lo que hacemos es proporcionar abstracción a los programadores, para que puedan crear un gran código, y para que este código caiga en manos de los clientes que se benefician de él.

Los programadores necesitan un repositorio de Subversion. Obtener un repositorio de Subversion significa que necesita una red y un servidor que se deben comprar, instalar, reservar y proporcionar energía ininterrumpida, y que el servidor genera mucho calor y que debe estar en una habitación con aire acondicionado adicional, y que el aire acondicionado debe tener acceso al exterior edificios, lo que significa instalar una unidad de ventilador de 80 libras en una pared exterior del edificio, lo que pone nerviosos a los propietarios del edificio, por lo que deben llevar a su constructor para acordar dónde instalar la unidad de aire acondicionado (solución): (en la pared externa, aquí, a los 18 piso, en el lugar más inconveniente), y los propietarios llaman a su abogado, porque tenemos que firmar para que se nos permita hacer esto, y luego aparecen los tipos de instalación de aire acondicionado con aparejos,lo cual no es conveniente, lo que pone nervioso al capataz, y no les permite salir de la ventana del piso 18 en un cinturón Mattel hecho de plástico rosa de 1/2 ", lo juro por Dios, podría ser un cinturón de Barbie Disco, y alguien debería llamar al trabajador de la construcción nuevamente agente y descubra qué demonios se dieron cuenta de repente después de 12 semanas en el proyecto de construcción de que necesitarían otra enmienda al contrato para este maldito aire acondicionado, que sabían antes de Navidad, y solo adivinaron que si sus programadores pasan al menos un minuto pensando sobre esto, entonces esto ya es demasiado.¿Por qué demonios se dieron cuenta de repente después de 12 semanas en el proyecto de construcción de que necesitarían otra enmienda al contrato para este maldito aire acondicionado, que sabían antes de Navidad, y solo adivinaron que si sus programadores pasan al menos un minuto pensando en ello, entonces Esto ya es demasiado.¿Por qué demonios se dieron cuenta de repente después de 12 semanas en el proyecto de construcción de que necesitarían otra enmienda al contrato para este maldito aire acondicionado, que sabían antes de Navidad, y solo adivinaron que si sus programadores pasan al menos un minuto pensando en ello, entonces Esto ya es demasiado.

Para los desarrolladores de software en su equipo, todo esto debería resumirse, como ingresar svn commit en la línea de comando.

Es por eso que debes tener administración.

Esto es para aquellas cosas que ninguna compañía puede evitar, pero si tiene programadores que están preocupados por eso, la administración ha fallado, al igual que un yate de 100 pies fallará si el millonario propietario tiene que bajar a la sala de máquinas. y arreglar el motor.

Su compañía típica fue fundada por ex vendedores de software, donde todo es ventas, y todos existimos para aumentar las ventas. Estas compañías no pueden tomar el control por sí mismas porque crean la versión de software 1.0 (de una forma u otra) y luego pierden por completo el interés en desarrollar un nuevo software. Su equipo de desarrollo está muriendo de hambre o no existe, porque a nadie se le ocurrió construir la versión 2.0 ... todo lo que la gerencia puede hacer es aumentar las ventas.

Por otro lado, tienes empresas creadas por antiguos programadores. Estas compañías son más difíciles de encontrar, porque en la mayoría de los casos se comportan en silencio, escriben código en algún lugar del sótano que nadie encuentra y, por lo tanto, se desvanecen en silencio inmediatamente después de la Gran Reescritura de Ruby.

Ambos ejemplos pueden ser fácilmente destruidos por una compañía que es administrada por programadores y organizada para poner a los programadores en el asiento del conductor, pero que tiene una excelente abstracción, haciendo todo el trabajo duro de convertir el código en productos.

El programador es más productivo con una cuenta personal silenciosa, una computadora excelente, un número ilimitado de bebidas, una temperatura ambiente de 20 a 23 grados centígrados, sin deslumbramiento en la pantalla, una silla que es tan cómoda que no lo siente, un administrador que trae correo y ordena los manuales. y libros, por un administrador del sistema que hace que Internet sea tan accesible como el oxígeno, un probador para encontrar errores que simplemente no pueden ver, un diseñador gráfico para embellecer sus pantallas, un equipo de vendedores, para que las masas quieran obtener sus productos, un equipo de vendedores para asegurarse de que las masas puedan obtener estos productos, asistencia técnica, que ayuda a los clientes a hacer que el producto funcione y ayuda a los programadores a comprender qué problemas causan las llamadas de asistencia técnica,y alrededor de una docena de otras funciones de soporte y administración, que en una empresa típica suman aproximadamente el 80% del salario. No es casualidad que el ejército romano tuviera una proporción de cuatro sirvientes por soldado. Esto no fue decadencia. Los ejércitos modernos probablemente operan en una proporción de 7: 1. (Esto es lo que Pradeep Singh me enseñó hoy: si solo el 20% de su personal son programadores, puede ahorrar un 50% en salarios al subcontratarlos a la India, ¿cuánta ventaja competitiva obtiene realmente de este 10% de ahorro? )(Esto es lo que Pradeep Singh me enseñó hoy: si solo el 20% de su personal son programadores, puede ahorrar un 50% en salarios al subcontratarlos a la India, ¿cuánta ventaja competitiva obtiene realmente de este 10% de ahorro? )(Esto es lo que Pradeep Singh me enseñó hoy: si solo el 20% de su personal son programadores, puede ahorrar un 50% en salarios al externalizarlos a la India, ¿cuánta ventaja competitiva obtiene realmente de este 10% de ahorro? )

La principal responsabilidad de la administración es crear la ilusión de que una empresa que se ocupa del software puede comenzar escribiendo código, porque eso es lo que hacen los programadores. Y aunque sería genial tener programadores que también estén bien versados ​​en ventas, diseño gráfico, administración de sistemas y cocina, esto no es realista. Como enseñarle a cantar a un cerdo, toma tiempo y molesta al cerdo.

Microsoft está haciendo un trabajo tan bueno al crear esta abstracción que los graduados de Microsoft son notoriamente difíciles de crear compañías. Simplemente no pueden creer cuánto ha pasado sin su conocimiento, y no tienen idea de cómo recrearlo.

Nadie espera que Dolly Parton sepa cómo enchufar un micrófono. Detrás de ella hay una increíble red de gerentes, músicos, técnicos discográficos, compañías discográficas, artistas visitantes, peluqueros y publicistas que existen para crear una abstracción que, cuando canta, es todo lo que millones de personas necesitan para escuchar su canción. . Todo el personal de soporte y la gerencia que hacen posible el trabajo de Dolly Parton pueden hacer su trabajo de la mejor manera, proporcionando la abstracción más perfecta: la ilusión más perfecta que Dolly canta para nosotros. Esta es su canción Cuando lo escuchas en tu iPod, hay una gran infraestructura que lo hace posible, pero lo mejor que puede hacer la infraestructura es desaparecer por completo. Proporcione la abstracción que Dolly Parton usa para nosotros personalmente.




imagen
Aprenda los detalles de cómo obtener una profesión solicitada desde cero o subir de nivel en habilidades y salario tomando los cursos en línea de SkillFactory:




All Articles