Puedo decir que entré por la puerta de la programación mediante engaños y artimañas, y luego corrí a toda velocidad. Antes de los 26 años no tenía casi ninguna experiencia escribiendo código. Al graduarme de posgrado, sin embargo, elegí accidentalmente una startup que no podía ofrecer formación. Bajo la triple presión de preocuparme a diario por la quiebra de la empresa, temer ser despedido y soportar las miradas frías de los colegas, nadé contra la corriente. Tras un año y medio, renuncié, y ya era el programador principal del backend de un producto con 5 millones de usuarios. Antes sentía temor reverencial hacia la tecnología informática, creyendo que los maestros de la técnica debían estar envueltos en un aura de iluminación, tecleando sin descanso día y noche, escribiendo decenas de miles de líneas de código al día. Ahora que he visto algo más de mundo, al recordar aquel proceso de incertidumbre, como una primera noche, no encuentro nada de inspirador en ello, sino que lo considero algo natural. El programador ideal no se diferencia en nada del arquitecto ideal, del contable ideal o del masajista ideal; en esencia, todos son un grupo de artesanos. Creo que cualquiera puede convertirse en el programador ideal.

En los últimos tres años he estado siempre mezclado en el círculo de Internet. He conocido a algunos programadores, he trabajado con algunos, he dirigido a algunos y he entrevistado a algunos. Sus formaciones académicas varían: algunos vienen de la Universidad de Pekín, algunos de instituciones de formación, unos son doctores, otros abandonaron la secundaria; su experiencia también varía: algunos vienen de BAT, otros de una gestora de fondos en quiebra (y además eran vendedores); la antigüedad va de 0 a 15 años. Pero creo que los programadores solo se dividen en tres categorías: el programador genio, el programador ideal y el programador mediocre. Del programador genio solo puedo decir que he tenido contacto con tres; eso es destino. El 70% queda decidido cuando eres un espermatozoide: poseer un talento matemático excepcional, una lógica fría y meticulosa, y una pasión técnica que prefiere no dormir antes que resolver problemas difíciles y encuentra en ello una gran alegría; el 30% proviene de empezar muy, muy temprano, casi deseando comenzar a jugar con computadoras cuando los de tu edad aún jugaban con barro, y superar la regla de las diez mil horas antes de graduarte de la universidad; de ahí en adelante, la vida ya es un juego.
Los programadores genios no se encuentran fácilmente, y menos aún abundan; el 90% que veo siguen siendo programadores mediocres. La expansión de la era de las TI ha hecho que los programadores sean tan comunes como los impresores del Renacimiento. La mayoría de los que se ponen bajo la puerta del fundador del oficio solo buscan un mejor plato de arroz, mejores salarios y una mejor subsistencia. El programador mediocre escribe código podrido, sin normas ni coherencia, se aferra a los lenguajes del viejo mundo, y además le gusta hablar de grandes arquitecturas y rendimiento, con palabras más bonitas que sus obras. Y, sin excepción, creen que la tecnología no tiene salida; consideran que hacer producto, marketing y gestión son oficios más nobles y elegantes, y el 99% de ellos, de forma natural, deja entrever que casualmente poseen talento para esas áreas, mientras que no se dignan a entender pequeños problemas como por qué se bloquea un proceso.
Y es con los programadores ideales con quienes más disfruto estar; desearía comer y vivir con ellos, y si me lo permitieran, querría que mi equipo estuviera lleno de sus banderas. El programador ideal no tiene malas intenciones (nunca son los favoritos de la política de oficina; son un grupo de artesanos simples, luminosos y alegres), tiene una curiosidad inocente y desbordante (en sus ojos suele brillar: «¡Vaya, ¿cómo se habrá hecho esto?!»), siempre busca la mejora continua (su muletilla es «déjame investigar un poco más») y además le encanta compartir (son activos en GitHub, en varias comunidades de preguntas y respuestas y a tu lado; están dispuestos a dedicar su valioso tiempo a ayudar a los novatos). Sí, no necesitan ser gestionados; solo necesitan una dirección general, y siempre devuelven resultados inesperados.
El programador ideal y el mediocre están separados solo por una pared. La diferencia entre ambos es solo de seis pequeños detalles, y la diferencia entre las personas se amplía para siempre precisamente en esos detalles acumulados día tras día. Lo interesante es que he descubierto que estos seis pequeños detalles tienen que ver con la conciencia; es decir, igual que los programadores y todos los oficios de las nuevas industrias, basta con conciencia y la forja del tiempo para que cualquiera pueda alcanzar la etapa ideal. El programador ideal es necesariamente también un excelente problem-solver.
El primer pequeño detalle: concentración en el presente
He visto demasiados programadores con la mente divagando, y no tengo más remedio que poner «concentración en el presente» como la primera regla absoluta. A menudo tienen todo tipo de pequeños sueños, como ser un pequeño agricultor de té, un pequeño vendedor de gansos, hacer producto, hacer ventas, hacer inversiones; pero se ven «perjudicados» por el alto salario de programador o por no tener el coraje de cambiar de carrera. Y, debido a su falta de concentración, no les importa hacer bien su propio trabajo, no les importa perfeccionar sus habilidades, no les importa aprender las nuevas tecnologías. Es innegable que en este mundo existen grandes productos (como Steve Jobs), grandes vendedores (como Ellison), grandes inversores (como Peterffy), y todos ellos, sin excepción, provienen de ser programadores. Pero ¿has oído lo que Buffett dijo de Gates? Si Bill Gates cambiara de carrera para vender perros, entonces sería el mayor vendedor de perros del mundo. Creo firmemente que, excepto unos pocos genios, todas las personas comunes pueden tener éxito en múltiples campos, siempre que mantengan suficiente concentración. E incluso si al año siguiente quieres ir a vender perros, la experiencia como programador aún puede entrenar tu poderosa lógica, prudencia y paciencia, que en cualquier industria son una competitividad considerable.
El segundo pequeño detalle: capacidad de pensamiento y empuje
Creo que lidiar con incidentes como bugs, caídas, optimización de rendimiento e intrusiones muestra mejor la diferencia entre el programador mediocre y el ideal que la propia programación. Cuando se enfrenta un problema desconocido, cómo localizar el problema central en condiciones complejas, cómo analizar las causas subyacentes del problema desenredando el hilo, cómo eliminar interferencias y reducir a un escenario mínimo verificable, cómo capturar los datos clave para verificar las propias conjeturas y experimentos: todos estos son los mejores escenarios para reflejar la capacidad de pensamiento del programador. Sí, al medir al programador ideal, la capacidad de pensamiento es más importante que la experiencia.
A veces, cuando un compañero viene corriendo y me pregunta: «Envié una tarea y se quedó atascada, ¿qué hago?», siempre siento que podría hacerlo mejor. Por ejemplo, podría probar otras tareas para descartar un problema del propio código; podría revisar las excepciones a través de la interfaz web (si no tiene cuenta, puede pedirme que se la proporcione); podría revisar los registros del host o borrar la caché; y en el peor de los casos, al menos debería proporcionarme el ID de la tarea y los registros de la consola. El programador ideal nunca espera a que las cosas avancen; usa todos los medios para hacerlas avanzar.
El tercer pequeño detalle: nunca digas no
Recuerdo que antes de renunciar a mi antigua empresa, hablé con el jefe y me dijo que mi mayor virtud era que nunca le decía que algo no se podía hacer. Más tarde descubrí que en muchos equipos existe una oposición entre tecnología y producto: los programadores suelen bloquear las necesidades de producto con «técnicamente no se puede implementar», y los de producto suelen burlarse de los programadores con «si Facebook puede, ¿por qué nosotros no?». Estas dos frases deberían ser palabras prohibidas; en el fondo, ninguna favorece el amor entre el mono programador y el perro de producto.
Decir «técnicamente no se puede implementar» es fácil, pero ¿cuántas personas, al decir esa frase, están 100% seguras en su interior? Si no están seguros, ¿por qué no volver a Google y responder después? Originalmente pensaba que los programadores están llenos de imaginación, y que gracias a la imaginación pueden nacer tantos software y productos de Internet que cambian nuestras vidas. Tras ver más, comprendí que la mayoría de los programadores ya se han vuelto conservadores en la lucha contra los bugs y no están dispuestos a asumir riesgos; al mismo tiempo, muchos equipos tampoco están dispuestos a tolerar el fracaso. Así, «Say No» se convierte en un rechazo habitual. ¿Recuerdas por qué Zeng Guofan disolvió el Ejército de Hunan? Dijo que ese ejército ya estaba «cargado de un aire decadente» y no podía luchar. Para ser un programador ideal, no debes darte la oportunidad de cultivar ese aire decadente. Si te enfrentas a requisitos irrazonables, puedes exponer el costo de tiempo, mostrar una solución alternativa para lograr el objetivo por una ruta indirecta; un simple y brusco «Say No» no es aceptable.
El cuarto pequeño detalle: invertir en el futuro
La programación es una profesión muy cruel. Los lenguajes, frameworks y patrones que aprendes y usas probablemente se vuelvan cosa del pasado en pocos años; el grupo de programadores al que hoy te ríes puede darse la vuelta y reírse de ti en cualquier momento. Por lo tanto, el programador ideal, además de hacer bien su propio trabajo, debe dedicar tiempo a invertir en el futuro. ¿Qué es «invertir»? Invertir es que el tiempo que dedicas ahora te será recompensado en el futuro con más tiempo o dinero (¡mira los salarios actuales de los programadores que aprendieron iOS hace unos años!). Tomemos mi propio campo, la minería de datos, como ejemplo. Alrededor de 2008, Hadoop comenzó a surgir; de repente, el concepto de «big data» se volvió candente, era difícil encontrar ingenieros de Hadoop incluso pagando una fortuna, y las empresas de Internet se apresuraron a migrar sus operaciones de estadística, análisis y minería de datos a plataformas distribuidas. En los últimos años, Hadoop sigue iterando, pero Spark ha emergido con fuerza, rompiendo de una vez el récord de ordenación que mantenía Hadoop. La ventaja de rendimiento de almacenar datos intermedios en memoria y las ricas estructuras de datos hacen que todos se enamoren de él, aunque sus extraños pequeños bugs y su empinada curva de aprendizaje hacen que muchos retrocedan. Entonces, cualquiera con vista clara sabe que Spark es la tendencia del futuro (la memoria será cada vez más barata). Bajo la condición de mantener el negocio principal en Hadoop, se pueden cambiar adecuadamente algunos módulos pequeños a Spark, prestando atención al desarrollo de la comunidad de Spark. Pronto, las ganancias de rendimiento obtenidas de Spark recuperarán el tiempo de aprendizaje invertido antes.
El quinto pequeño detalle: hacer buen uso de las herramientas
Hacer buen uso de las herramientas se puede dividir en 4 niveles:
- Motor de búsqueda
- Desconfiar de la repetición
- Fragmentos de código
- Automatización
Cuando acababa de entrar en la industria, un amigo que estudió informática pero se había convertido en funcionario público me preguntó: «Tú nunca has aprendido programación, ¿cómo escribes código normalmente?». Le respondí: Google, y recibí una burla despiadada, hasta el punto de que en todas partes mi cuenta se llama 2shou, para recordarme que soy un programador de segunda mano sinvergüenza. Esto es una broma, pero si ahora me preguntaran, seguiría respondiendo Google. El crecimiento de un programador es como un pastel redondo que se expande; afuera hay un mar sin límites. Cuanto más grande es el pastel, mayor es la superficie de contacto con el mar; cuanto más sabes, más ignoras. Además, las ciencias de la computación son una disciplina que se actualiza con una rapidez extraordinaria, y también es la disciplina cuyos conocimientos están mejor integrados en Internet. Es difícil utilizar los métodos tradicionales de enseñanza académica; por el contrario, a través de los motores de búsqueda es muy fácil obtener los conocimientos más recientes.
Desconfiar de la repetición; los maestros lo llaman principio DRY (Don't repeat yourself). Cuando has escrito mucho código, desarrollas una intuición para juzgar el código bueno y el malo. Mi estándar es la simplicidad y la estandarización. La simplicidad no es un criterio estético: cuanto menos repetición hay, menos oportunidades de cometer errores y menor es el costo de mantenimiento posterior.
Si desafortunadamente pierdes el código de hace tres semanas, quizás puedas, gracias a tu memoria excepcional, reescribir los fragmentos residuales de tu mente, pero si pierdes el código de hace tres meses, temo que no tengas tanta suerte. El programador ideal se esforzará por encontrar formas efectivas de guardar información, guardando los fragmentos cortos de código, scripts, configuraciones, experiencias, etc., que escribiste en momentos de inspiración, para poder revisarlos en cualquier momento.
El programador ideal debe ser perezoso. Para ellos, los pasos repetitivos y el código repetitivo son igualmente feos; si se dan cuenta de que un trabajo puede repetirse a largo plazo, siempre es mejor automatizarlo lo antes posible.
El sexto pequeño detalle: gestión del tiempo
La gestión del tiempo es especialmente importante en la profesión de programador porque al completar tareas debes "caminar solo" como un lobo en la naturaleza. Si puedes controlarte de manera estable sin restricciones externas y asegurar un trabajo y estudio de alta eficiencia, con el tiempo sin duda te volverás más hábil que la gente común.
Los programadores realizan un trabajo intelectual de alta intensidad; generalmente es suficiente concentrarse de 4 a 5 horas diarias para el trabajo principal, pero fuera del trabajo, siempre hay que reservar tiempo para aprender. Además de aprender, también es necesario dejar algo de tiempo para despejarse; aprovecha los momentos de preparar té o café para dedicarte ese tiempo precioso, pensar hacia adelante y hacia atrás, y lograr el doble de resultados con la mitad de esfuerzo.
Después de decir tanto, seguramente alguien preguntará: ¿de qué sirve esforzarse tanto para convertirse en un programador ideal? ¿Habrá un salario alto? No. ¿Podrás ascender? No parece. ¿Casarte con una mujer rica y hermosa? Mejor ve a vender perros.
Kazuo Inamori contó una vez una historia: los artesanos de la era Meiji fueron convocados por el emperador; aunque eran campesinos sin estudios, al dedicarse con diligencia a una sola cosa durante toda su vida, naturalmente tenían un aura noble. El programador ideal debería seguir esa aura noble, ¿verdad?
Autor: Sandy
Enlace original: http://mdsa.51cto.com/art/201511/496267.htm#topx