Me gustan las ciencias de la computación y las matemáticas, pero no me gusta mi trabajo como desarrollador de software. Siento que el conocimiento que tengo que aprender como programador es conocimiento barato. ¿Qué tengo que hacer?

Su publicación es bastante larga (y mi respuesta probablemente también lo será), pero veamos si mi diagnóstico es correcto …

Lo que estoy escuchando es que te gusta el pensamiento profundo, MUCHO. Me puedo identificar con eso. De hecho, existe una profunda alegría que brota de cada momento “aha” personal. Y es aún más placentero si su percepción se valida más adelante con varias observaciones o incluso con una investigación que encuentra mientras explora su descubrimiento. Sí, es un poco decepcionante darse cuenta de que alguien más ya lo pensó, pero al mismo tiempo, La sonrisa que obtienes al saber que lo lograste por tu cuenta no tiene precio. Y tienes razón, ser ese tipo de persona te hace sentir “sucio” si te ves obligado a recurrir a un conocimiento superficial para hacer bien tu trabajo. Qué bueno debe ser si ser un filósofo puede ser una verdadera carrera como en los tiempos antiguos. Pero es el mundo moderno, por lo que tenemos que adaptarnos al sistema hasta el momento en que uno de nuestro tipo logre cambiarlo. Como tal, tengo 3 recetas para usted. Yo mismo tomo los 3 medicamentos, lo que me permite mantener mi trabajo diario y estar contento al mismo tiempo:

1. Vive una doble vida. En el trabajo, apaga tu cerebro (o al menos bájalo). Es un lastre, pero recuerda que es necesario por ahora. Solo asegúrese de no quedarse más que el número mínimo de horas requeridas. Fuera del trabajo, sin embargo, persigue tus pasiones. Seleccione un proyecto personal. Podría ser cualquier cosa. El objetivo es doble: utilice su capacidad de pensamiento al máximo; y obtenga la satisfacción de crear algo sin que otros dicten una fecha límite o cómo debe hacerlo. En mi caso, estoy trabajando en un software financiero personalizado con todas las campanas y los silbidos que deseo usar personalmente. Simplemente no caigas en la trampa de la parálisis por análisis. Recuerde que puede continuar adquiriendo los conocimientos / habilidades necesarios y planificando el esfuerzo. Pero también es necesario crearlo en algún momento. Créeme, la alegría de ver tu creación terminada es igualmente profunda a la del descubrimiento.

2. Excavar en busca de principios y conceptos. Incluso el conocimiento más barato tiene un par de principios subyacentes. Tomando su ejemplo de aprender a usar un analizador XML … profundice lo suficiente para descubrir los algoritmos subyacentes que los creadores utilizaron; descubra las técnicas que emplearon para superar los límites dictados por su elección de plataforma; Comprender las filosofías de diseño que eligieron y por qué. Incluso puedes sacrificar un poco de productividad y usar la “curva de aprendizaje” como excusa para tu búsqueda personal. Simplemente no exagere o será arrestado. Con el tiempo, a medida que absorbe más y más principios, se dará cuenta de 2 cosas: (a) emplear los principios que aprendió en sus propios esfuerzos se convierte en una segunda naturaleza; (b) la herramienta puede haber sido reemplazada por algo más brillante, pero desgraciadamente, esta nueva utiliza los mismos principios subyacentes y quizás un par de otros de una herramienta diferente; por lo tanto, aprenderla es tan fácil y rápido como leer el resumen de una historia que ya conoces. De hecho, cuando alguien le ofrece un proyecto para crear una aplicación con Django, puede aceptarla incluso si nunca la ha programado anteriormente porque ya conoce los conceptos de ORM, MVC, marcos y arquitectura de software de múltiples niveles … así que, cómo diferente podría ser de RoR que ya has usado? Créeme, aprender las diferencias sutiles no toma más de 3 días. Sé esto a ciencia cierta porque no solo lo hice recientemente, sino que lo he hecho no menos de 5 veces con diferentes tecnologías en el pasado. No aprenderás todos los matices tan rápido, por supuesto, pero ese no es el objetivo, ¿verdad? Solo necesitas aprender lo suficiente para usarlo de manera efectiva. Aprenda las filosofías detrás de un destornillador y no tiene que aprender a usar un juego de destornilladores eléctricos.

3. Ser una fuerza innovadora en el trabajo. No importa si eres nuevo. Puede desafiar el sistema existente. Simplemente no seas un idiota al respecto. Y elige un pequeño aspecto a la vez. Sin embargo, es cierto que esta requiere algunas otras habilidades que no se encuentran normalmente en una persona analítica: tienes que aprender el arte de influir en las personas. Simplemente tómelo como una exploración en otro ámbito de la ciencia: la psicología organizacional. A largo plazo (una muy larga), esto puede convertir su oficina en una cuya cultura ya no requiere que haga el número 1 anterior.

Buena suerte. Y nunca lo olvides, todo es solo una cuestión de perspectiva.

He aquí un pensamiento: crea tu propio algoritmo kick-a ** para analizar XML (o lo que sea que sea el du jour de “aprendizaje barato”). Parece que incluso podría crear un analizador XML que resistirá la prueba del tiempo, ya sea por rendimiento, facilidad de uso o lo que sea.

También tengo títulos en Informática y Matemáticas, y también encuentro que el algoritmo es la parte divertida de mi trabajo: encontrar un enfoque único y / o una visión del problema en cuestión siempre es un gran energizante.

Por cierto, he estado en el desarrollo de software durante más de 30 años (principalmente en el procesamiento de transacciones y mensajes de mainframe de IBM), y todavía me encanta. A lo largo de los años, he creado y coautor de artículos técnicos sobre temas como los modelos avanzados de transacción, que exploraron las muchas topologías para el procesamiento de transacciones, como Asynchronous / Loosely-Coupled / Parallel como patrón de diseño, y Threadsafe Design Patterns que contenía algunas matemáticas bastante pesadas para identificar y minimizar las “condiciones de carrera” cuando dos o más tareas acceden al mismo recurso (s) en una configuración de múltiples CPU.

Mi punto es que, al igual que muchos otros que han publicado aquí, no has hecho esto lo suficiente como para haber “dominado” a Jack-squat. Solía ​​hacer todo el entrenamiento de nuevos empleados para una compañía de Fortune 500, y les dije a todos (y ofendí a muchos) que una Licenciatura (o una Maestría sin experiencia en el trabajo) no significa que estés “educado”. Simplemente significa que eres educable . Use los siguientes 1,000 o más proyectos para aprender a usar los diversos martillos, sierras y destornilladores. Cada uno fue creado porque lo que existía antes no satisfacía las necesidades de la época.

Como pasatiempo, todavía estoy trabajando en la creación de un lenguaje de programación de máquina de estado para microcontroladores porque me parece que todo “por ahí” hoy en día es un ajuste retroactivo para el mundo de microcontroladores / robótica. (Yo llamo a mi nuevo idioma “SMAL” para el lenguaje de aplicación de State Machine). Todavía es un problema como lenguaje, pero mejora cada vez que agrego o modifico una función.

Entonces, mi segundo punto sería, si no te gustan las herramientas que te dan, crea las tuyas. Confíe en mí, ¡el resto del mundo le informará si sus nuevas herramientas son buenas!


Estás en lo correcto. La mayor parte del conocimiento de programación gira en torno a descubrir los entresijos de esta o aquella biblioteca que probablemente morirá y desaparecerá en unos pocos años. Hay principios fundamentales, por supuesto, pero están empequeñecidos por la cantidad de conocimientos específicos de herramientas que tienes que averiguar. Tendrás que volver a aprender una y otra vez y otra vez.

Con eso en mente, la mejor idea en su caso sería trabajar en el proyecto que le interesa personalmente, tratar de entrar en alguna tecnología de investigación o intentar encontrar algo de consuelo en la idea de que su salario lo mantendrá alimentado.

La mayoría de las cosas que las personas no tienen impacto a largo plazo de ninguna manera, ya sea la programación o no.

Sin embargo, hay un detalle importante:

> Entonces el valor del aprendizaje es muy poco.

En el proceso, aprenderá mejor y escaneará un gran volumen de información para obtener información relevante. Se supone que debes poder tomar cualquier marco con el que nunca hayas trabajado, escanear rápidamente la documentación en busca de la información que necesitas y hacer que funcione. Esa es una habilidad, y mejorarás en esa habilidad durante la programación. Con el tiempo, verá patrones similares en distintos marcos, formas similares de proporcionar esta o aquella funcionalidad y formas similares que utilizaron para desglosar el problema en un conjunto de conceptos o abstracciones. Tú decides si es una habilidad importante o no.

Tal vez podrías seguir estudiando ciencias de la computación como investigador, por supuesto. La computación no es propiedad de los programadores, son los científicos detrás de la computación los que lo hacen posible. Muchas empresas importantes como Google tienen científicos informáticos que investigan para que su empresa pueda estar por delante del “juego”. Ya sea desarrollando algoritmos, demostrando su corrección, o algo en particular, siempre hay una necesidad de teoría en la computación.

¡Espero que esto ayude!

Supongo que estás trabajando en algo parecido a una tienda de Java, donde obtienes especificaciones en forma de interfaces, donde solo tienes que implementar lo que otra persona ya “pensó”. Si es así, entonces no se sorprenda de que no le guste su trabajo: no hay ninguna persona en su sano juicio en este mundo. Todos nos metimos en la programación debido a la libertad creativa que permite, no escribir texto.

Sin embargo, no estoy de acuerdo con que las herramientas no sean dignas de aprender. Claro, se vuelven obsoletos y reemplazados, ¿y qué? Los nuevos serán mejores y te permitirán hacer más. Además, el aprendizaje continuo es parte del trato. Este argumento suena un poco como “si voy a tener hambre otra vez, ¿por qué debería comer”?

Con respecto a qué hacer al respecto, tiene un par de opciones: conservar el trabajo que tiene y comenzar a trabajar por la noche, resolviendo un gran problema con el que se siente entusiasmado. Lance un nuevo producto, vea cómo va, si sale bien, abandone su trabajo y comience a trabajar a tiempo completo en él. La otra opción es encontrar un trabajo mejor: las empresas más pequeñas y las empresas de nueva creación no solo le permitirán utilizar la teoría que desea utilizar, sino que probablemente la necesitarán de usted, usted será el arquitecto y el implementador de la cosas que creas

Parece que eres muy bueno aprendiendo. El sentimiento es muy común y muy comprensible. Si no tuviera que preocuparme por alimentar a mi familia, definitivamente estaría pensando exactamente de la misma manera.

A veces aunque tendemos a cometer los siguientes errores.

1. Cuando aprendemos algo realmente bien, tendemos a pensar “Esto es tan simple. Cualquiera puede aprenderlo”.

2. Cuando tenemos una tarea a la mano, muchas veces tendemos a pensar “Esto no es importante. Tengo que estar haciendo algo más importante”.

La clave es entender que –

1. No hay mucha gente en el mundo del software que sea realmente buena. Lo que le toma 1 hora para terminar puede llevar a otra persona 8 horas. Eso te pone en ventaja. En lugar de eso, dedique 4 horas productivas todos los días (si se da cuenta de que probablemente ganará el mismo dinero para la empresa que cuando asignó 8, porque está acortando el tiempo que dedica a preocuparse de cómo lo está haciendo personalmente sin importancia trabajo inútil). De esta manera obtienes 4 horas para gastar la forma en que quieres hacer las cosas que importan.

2. Cuando realmente lo piensas bien, las personas que desarrollaron HTML, CSS, XML y todas las cosas que crees que son temporales, fueron ingenieros. Trate de pensar lo que estaba pasando en sus mentes. Trate de encontrar sus fallas y aprender de sus errores. Aprenderá que la única manera de salir de este lío es, probablemente, construir un nuevo lenguaje / herramienta perfecto que resuelva todos los problemas (que será temporal e inútil en opinión de otra persona).

La vida es así, un círculo vicioso. Entonces, ¿cuál es la salida?

Sencillo. Solo aprenda mucho, trabaje un poco, haga tanto heno como sea posible cuando brille el sol, disfrute el momento presente como si fuera el último. Sea feliz. El éxito y el contenido seguirán sin respuesta.


Usted está en una etapa difícil para el desarrollo de software a los 9 meses. Crees que sabes cómo hacer todo, pero en realidad no sabes mucho. Las cosas que usted llama ‘conocimiento barato’ son los martillos y taladros que tendrá en su caja de herramientas para siempre de una forma u otra. Usted dice que el tiempo dedicado a aprender las herramientas se desperdicia en un 90%, pero usted es tan nuevo en la profesión que aún no puede hacer ese tipo de juicio.

Leyendo entre líneas, creo que lo que realmente estás diciendo es que odias el análisis de XML y aprender a hacerlo es drenar tu alma a una cáscara desecada … y estoy totalmente a tu lado con eso, el análisis de XML sopla. Pero lo superará y, si se demuestra a sí mismo, se le darán más proyectos interesantes.

Necesitas entender que TODOS los trabajos apestan a veces. Analizar XML solo hace que las partes divertidas lo sean mucho más.

Lo que ha encontrado no es infrecuente para las personas más inteligentes en el mundo del software.

Durante el año pasado, más o menos, he comparado a las personas de la “Hora del Código” que intentan aprender a programar (en comparación con el aprendizaje en profundidad de los principios fundamentales, como en el que tiene un interés obvio) … He comparado a los estudiantes poco profundos para “hacer un trabajo” a un trabajo de cajero moderno (como en: Cajero en un Mini-Mart o registro de supermercado).

En todos tus comentarios, el hilo común es que prefieres no perder el tiempo reescribiendo la misma mierda que todos los demás hacen, una y otra vez, de cien maneras diferentes.

Simpatizo contigo en esto. Pero, al mismo tiempo, ya sea que se trate de un software formal para la redacción de trabajos (el mismo viejo código de mierda todos los días para apaciguar a un adicto a la administración), o un trabajo de investigación … te encontrarás haciendo algunas pulsaciones de tecla repetitivas.

Debe encontrar un trabajo orientado a la investigación, progresista y orientado al futuro, en lugar de un trabajo de programación pura. Los trabajos de programación puros se centran en los monos codificados que se sientan detrás de los teclados tirando basura en una pantalla para cumplir con los objetivos y metas de la administración. Obviamente no eres un recorte para esto.

Si es bueno en lo que hace en diseño algorítmico, matemáticas y en la reducción de la complejidad y el tiempo dedicado a resolver problemas, puede considerar un doctorado en CSCI o Matemáticas (o ambos). PERO, incluso en esos esfuerzos, encontrará la necesidad de “simplemente hacer el trabajo” para hacer las cosas (para apoyar la investigación detrás de los esfuerzos).

El péndulo oscila en ambos sentidos.

Estás en un lugar bastante común para un joven ingeniero o desarrollador de software: recién salido de la universidad, aplicando algunas habilidades, pero sintiendo que estás haciendo un trabajo pesado. Porque tú eres. Sin embargo, el tiempo que pasas en este momento es importante, por dos razones:

1. Debe demostrar a su empresa que realmente puede codificar.
2. Necesita obtener una base sólida en las habilidades técnicas necesarias para sobresalir en su vocación.

Si su empresa es buena, es decir. tiene un camino de progresión para usted, tendrán un plan para aumentar sus habilidades y la propiedad de las soluciones técnicas que proporciona. Pregúntale a tu jefe! Esto muestra que está manejando bien lo que le han dado y que está listo para más.

Es posible que tenga razón en que las cosas que está aprendiendo en este momento no son habilidades / conocimientos transferibles (aunque le sorprendería), sin embargo, ser capaz de aprenderlas rápidamente ES una habilidad transferible y muy valiosa. Así que no es una completa pérdida de tiempo.

En un sentido más amplio, lo que está aprendiendo / comenzará a aprender, es cómo estructurar el software en una arquitectura que resuelve problemas. La mejor manera de aprender esto es dirigirse a él usando proyectos en vivo, a menudo lo suficiente como para que los ingredientes clave se queden con usted, y luego comience a aplicar este conocimiento a proyectos ligeramente diferentes, hasta que sea capaz de sintetizar efectivamente soluciones a proyectos arbitrarios. Este es el camino de la progresión frente a usted y las habilidades que necesita para aprender. También los negocios y las habilidades sociales que acompañan la gestión de los requisitos del cliente, los plazos, etc. Por lo tanto, si esto no suena atractivo … puede que esté en la línea de trabajo incorrecta 😉

Podrías intentar trabajar en un campo diferente. Esa es una de las mejores cosas de ser un científico informático: hay tantas cosas diferentes con las que puedes trabajar. Todavía estoy en la universidad, pero ya sé cómo te sientes … Me encanta la programación, las matemáticas y la lógica, pero me aburro en la mayoría de los proyectos que me dan mis profesores. ¿Por qué? ¡Porque simplemente no son interesantes! No hay nada divertido o creativo en hacer un sistema de gestión de base de datos (al menos para mí). Solo puedo ver mi futuro yo feliz si trabajo en algo creativo, artístico, algo que me permita expresarme, como el desarrollo de juegos. Recuerdo cuando estaba desarrollando un juego con algunos amigos durante mi último año de escuela secundaria, y era todo en lo que podía pensar. Siempre que tenía tiempo y una computadora frente a mí, trabajaba en ello y rara vez me cansaba, casi siempre estaba en un estado de flujo. Incluso durante otras clases, si estuviéramos usando una computadora, mantendría Visual Studio abierto e intentaría trabajar en mi juego sin que me atraparan. Entonces, mi consejo para usted es: encuentre algo que le guste programar y trabaje en eso. Comience su propio negocio si es necesario, pero no trabaje en algo con lo que no esté satisfecho. Puede que no ganes tanto dinero, especialmente al principio, pero confía en mí, serás mucho más feliz.

Debes mantener tu trabajo pero obtener un título en ciencias de la información u otro campo relacionado con las matemáticas donde puedas centrarte más en las matemáticas. Una vez que haya completado su nuevo título, podrá cambiar de campo. Dicho esto, estoy totalmente en desacuerdo con su evaluación de que la programación es “conocimiento barato”. Si bien ese conocimiento puede ser más fácil de entender que los algoritmos matemáticos, es igual de importante. Si nadie implementa los algoritmos a través de programas, los algoritmos no ayudan a nadie. Por lo tanto, debe atenuar un poco su arrogancia y comprender el valor de cada contribución única. ¡Los mejores deseos!

Esta es una pregunta muy positiva y me encantaría agregar mis 2 centavos.

1. Entienda sus expectativas claramente. Necesita obtener una comprensión clara de sus responsabilidades para poder cumplir los objetivos. Esto es lo mínimo Incluye llegar a la oficina a tiempo y pasar tiempo en él.

2. Trate de entender lo básico. Por ejemplo. si trabaja en un producto … Entienda por qué los usuarios lo usan en primer lugar. Comprender su contexto … a fondo.

3. Desarrolle buenas relaciones con los compañeros y el gerente. Esto asegurará un entorno para que crezca donde pueda pedir ayuda libremente.

4. Trate de abordar los problemas difíciles. Los más fáciles nunca han hecho mucho por entender.

5. Lea los blogs o las tendencias técnicas en los avances de su campo.

6. Piensa cuáles son los puntos de dolor del producto. Intenta resolverlos. Intenta pensar cómo puedes vender el producto.

7. Sea apasionado por aprender, pero mantenga las promociones y los beneficios a un lado. Ellos seguirán.

¡Sé una estrella de rock! Tener una vision !! Empezar a trabajar..

Estoy parcialmente de acuerdo contigo.
Un analizador / navegador / etc en particular es solo uno de muchos.
Hay demasiadas cosas de ese tipo hoy para aprender (o querer aprender) que, como usted dice, cambiarán en unos pocos años. En épocas anteriores, los productos evolucionaron / desarrollaron en lugar de volcarse. Es como si un Mercedes se diseñara de nuevo cada dos años, en lugar de hacerlo, evolucionando hacia un automóvil más seguro, más económico, pero aún reconocible.

Debe intentar producir una pieza de software original para resolver un problema aún no resuelto. Sea original, sea audaz, pero no vuelva a inventar la rueda.

¡Realmente no te gusta el analizador xml! ¡La programación es necesaria porque así es como le ordenamos a las computadoras que realicen una tarea en particular! Las abstracciones como el analizador xml son necesarias porque escribir programas en binario es una tarea fácil para Chuck Norris, pero en general ¡Gente como nosotros, Java o cualquier otro idioma es una necesidad! El cambio en el paradigma de la programación es necesario porque aún es un tema imperfecto y si todo fuera perfecto, no habría necesidad de crear estas herramientas.
Si tengo que usar una analogía para explicar su problema, diría que la programación usa el idioma inglés para comunicarse con otras personas y que los algoritmos de aprendizaje y las matemáticas son la comprensión de la gramática de ese idioma. Ahora puede ser un experto en la gramática inglesa, pero ¿de qué sirve? Sería si no hablas con otras personas.

Así que “se graduó de la universidad hace nueve meses” y “ahora trabaja en una importante empresa de tecnología” ganando “más dinero que la mayoría de las personas que conozco en la universidad”.

¡¡FELICIDADES!! Estas son realmente buenas noticias, y miles de millones de personas en todo el mundo estarían encantadas de ocupar su puesto, y mucho menos de otras personas que también se graduaron de la universidad este año.

Un montón de buenos punteros de otras publicaciones, pero básicamente, mantén la cabeza baja y los oídos abiertos. Después de 18 meses a 2 años de buena experiencia en su haber, revalúe su trabajo y haga su mudanza.

Actualmente está trabajando en TI, que en algunos países ni siquiera requiere un título (solo algunos estudios vocacionales y / o certificaciones), y claramente un tema que no le gusta. Entonces, lo primero es considerar esto como algo temporal y renunciar lo antes posible.

Creo que tienes que decidir qué asignatura te gusta más: matemáticas, o ciencias de la computación teórica, y luego, debes continuar tus estudios en cualquiera de las áreas y planificar una carrera en consecuencia.

Soy el autor de la pregunta, he visto que esta pregunta es seguida por pocas personas, por lo que me responderé dos años después.

Seguí trabajando como ingeniero de software en la misma empresa hasta hace unos meses. No me gustó el trabajo hasta el final, pero traté de no gustarme menos yendo más lejos, aplicando enfoques de refactorización extrema, 100% TDD, tratando de obtener la mayor cobertura de código de prueba posible, trabajando en una propuesta no solicitada por nuestro cliente, etc.

Al final, no me gustaba la ciudad y mi salario aumentó ligeramente en 3 años, a pesar de que era uno de los mejores, así que dejé la empresa (y el país) y me mudé a otra empresa con una increíble cultura de ingeniería (y eso paga). MUCHO MUCHO mas).

Todavía me disgusta mi trabajo. Ya no creo que sea un conocimiento barato: no es tan sofisticado como sintonizar hiperparámetros en una arquitectura de aprendizaje profundo del estado del arte, pero he entendido que escribir código de backend impecable de forma sólida no es trivial ni barato.


Probablemente voy a cambiar de compañía nuevamente en 1-2 años, quiero trabajar de forma remota y esta compañía no permite el 100% remoto. Desafortunadamente creo que me quedaré con este tipo de trabajo para siempre. No soy lo suficientemente valiente como para doblar mis rodillas y saltar.