Estimado KV,
Soy nuevo a la programación y he justo comenzado a leer algunos libros acerca de la programación, particularmente de C++ y de Visual Basic. Disfruto de verdad el programar - hasta el punto que en el último par de meses nunca he faltado un día sin escribir un trozo código. Mi preocupación principal ahora es lo que sostiene el mundo para los programadores. ¿Si llaman a alguien programador (es decir, profesionalmente), qué programará realmente él o ella? ¿Inventará siempre nuevo software o qué, realmente? Esto está principalmente en el caso alguien que no trabajara para algún otro. ¿Mi otra pregunta es, puedes realmente hacerte una carrera como programador independiente, y qué programarás básicamente?
un programador Newbie
Estimado Newbie,
“Qué espera el mundo de los programadores?” Ésta es una pregunta tan interesante que no voy a darte ningún abuso para describirte como newbie ni para mencionar Visual Basic en cortés compañía. No que yo sea cortés compañía, pero puede haber niños alrededor de que podrían oírte. ¡Debemos cuidar a los niños!
Aunque escogiendo algunos libros en diversos lenguajes de programación, que es lo que has hecho ya, te enseñará que sobre esos lenguajes, no te enseñarán probablemente sobre programación sino solamente sobre la sintaxís del lenguaje que estás estudiando. Voy a jugarme un riñon aquí y a asumiré que lo qué realmente deseas ser no es tanto programador, un término realmente concreto, sino ingeniero.
En los viejos días cuando tenía el pelo y dientes, o, realmente más cercano a cuando nací y por lo tanto no tenía ni pelo ni diente alguno, un programador era la persona que entraba el programa en la computadora. Otra gente diseñaba el software y los sistemas, y entonces los programadores - había a menudo legiones de ellos - traducían estos diseños en software que la computadora podía entender.
Con la llegada de la programación interactiva, en comparación con la programación secuencial, la línea entre el programador y el ingeniero se difumina. Ahora un solo ingeniero puede ser el diseñador, el programador, el documentador, la garantía de calidad, el etc. No es que esto sea siempre la opción correcta, pero es cómo la industria se ha desarrollado. El número de gente que es terminantemente programadora, por lo tanto, es realmente pequeño.
Si deseas ser freelance - como dices, independiente - ingeniero, debes dejar esos libros de lenguajes de programación al azar y escoger algunos libros de cómo construir software. He dejado mi lista de lecturas recomendada en un artículo anterior (“Kode Vicious Bugs Out,” abril de 2006 de Kode) y así que no la repetiré aquí.
Lo que diré es que puedes tener ya una de las habilidades que necesitas a, que es lo que practicas diario. La informática es una ciencia y un arte. No sé porqué la gente siente la necesidad de hacer esa distinción tan a menudo, porque la mayoría de las ciencias son arte, en el sentido que para seguir siendo bueno en hacer ciencia necesitas practicar, apenas como con un arte. ¡El hecho de que dices, “… en el último par de meses nunca he faltado un día sin escribir un trozo código,” me conduce a creer que tienes una vida de servidumbre y de depresión en adelante! Oh, huh, que no es absolutamente lo que quería decir. Quería decir que ése practicar diario es un componente muy importante de ser buen ingeniero, o programador si tienes gusto.
No es suficiente escupir código, aunque, cualquier persona que ha oído al vecino trombonista autodidacta puede decirtelo. Después de años de tocar las mismas canciones, nunca las consigue tocar correctamente. Necesitas tomar medidas adicionales para anticiparte en tu arte. Lo primero es leer tanto código como escribes, probablemente más. El software es una forma de expresión, como prosa de la escritura, y como con cualquier tipo de expresión hay idiomas, frases, y los modos del pensamiento que conducen - o en nuestro caso, trabajando - a los diseños que satisfacen y a los que conducen al desastre. Los profesores de literatura són correctos en su aserción en que la “lectura de las obras clásicas” pueda ayudar con tu escritura.
En software hay un montón de obras clásicas a leer, y hay libros acerca de estas obras clásicas. Para el establecimiento de una red, uno de mis principales campos de interés, el sistema operativo de FreeBSD y su establecimiento de una red del TCP/IP. En el mundo de la base de datos hay MySQL, y para los servidores del Web, Apache. Estas bases de código son obras clásicas, y son Open Source así que són sistemas excelentes para estudiar.
Tener la historia completa del desarrollo, bajo la forma de revisionado del repositorio del código, es otra razón de trabajar con estos sistemas, puedes ver cómo se desarrollan en un cierto plazo, qué cambios ocurrieron, y por qué razón. Ninguno es perfecto, pero cada uno está bien documentado y és un ejemplo de un sistema vivo, con respiración. Si fueras arquitecto - de edificios, pues los arquitectos diseñan edificios y no software, aunque ese concepto es actualmente popular - desearías viajar por el mundo y estudiar varios pedazos de arquitectura. El software para aprende es mucho más barato, porque no necesitas un billete de avión - puedes permanecer en casa y estudiar los grandes trabajos de nuestra industria con una simple conexión de Internet.
El siguiente paso es conseguir que otros miren tu código. A menos que seas ese genio de los uno-décimo-de-uno-por ciento que puede hacer toda a la primer - y creo .1 por ciento es abundante - necesitas a gente para enseñarte y repasar la primera vez tu trabajo. Una vez más el Open Source puede ayudar aquí.
Enviar remiendos de tus programas preferidos, y aprender a trabajar con otros, esa es una de las grandes habilidades no enseñadas en cualquier departamento de la informática. Observar bien que un mentor es sólamente una guía y no debes crecer demasiado dependiente en él, o no aprenderás realmente nada. Un mentor es la persona a recurrir para el consejo cuando has llegado al final de tus ingenios, no cuando tienes una pregunta que puedes contestarte sin ser demasiado perezoso de trabajar en algo distinto. La holgazanería es una manera pobre de sentir bien a un buen ingeniero.
En cuanto a lo que puedes esperar del amplio mundo del software, bien, como el resto del mundo, 90 por ciento de él es una trampa. Si eres ingeniero freelance o trabajas para una gran compañía, vas raramente a escribir cantidades enormes de código definido por tí. Trabajarás definitivamente más a menudo en el código de otra gente que en tus diseños originales. Hay dos maneras de llevar esto: la primera es matar a cada uno de los ingenieros en la tierra, una tarea que podría tomarte un rato y resultando para tí en la perdida de tus privilegios de Internet; el segundo es cerciorarse siempre de tener cierto sistema en el cual seas tu quien conduce el trabajo. En realidad, así es cómo guardo los fragmentos restantes de mi cordura.
Sorprende a muchos de mis amigos no-frikis-computadoras que después de un día de trabajo, por las tardes y los fines de semana haría lo qué a ellos les parece la misma cosa, pero no es. Cuando trabajo en mis propios diseños y código, soy el amo, llamo la consonancia, y éso tiene más valor de lo que la mayoría de la gente puede imaginarse.
A tu pregunta final la respuesta es, programadores freelance puede llevarlo absolutamente bien. La gente freelance consigue a menudo algo menos del trabajo interesante, aunque, por lo menos con mi experiencia, porque consiguen la servidumbre que los lleno-contadores de tiempo no desean hacer. Eso no significa que no debas seguir esta trayectoria, pues puede ser absolutamente lucrativa y si está equilibrado bien puedes dejarte más tiempo para tus propios proyectos. Pero no debes engañarte en tus ideas de que entrarás como un freelance y diseñarás o construirás un gran sistema para un grupo o una compañía; eso es un acontecimiento muy raro. Lo que crearás depende exclusivamnte con quien trabajes. Podría ser sobre cualquier cosa, que es mitad de la diversión del trabajo en software.
Kilovoltio