¿Cuál es la clase más importante en la programación de software?

Las 4 habilidades más importantes para un desarrollador de software

Con la amplia gama de opciones de tecnología, idioma y plataforma disponibles en la actualidad, puede ser muy difícil determinar dónde invertir mejor el tiempo en la capacitación de sus habilidades como desarrollador de software.

A menudo me piden consejos sobre cómo ser un mejor programador.

La mayoría de las veces la pregunta que alguien hace se basa en si deberían o no invertir su tiempo en un lenguaje de programación o tecnología en particular frente a otro.

He pensado mucho en esto últimamente y he llegado a lo que creo que son las habilidades más importantes e intemporales que un desarrollador de software puede lograr y que les brindarán las mejores oportunidades profesionales y las harán más efectivas.

Habilidad 1: Resolver problemas

He hablado sobre la necesidad de aprender cómo resolver problemas antes e incluso he dado algunos pasos sobre cómo aprender a resolver problemas, porque creo que esta habilidad es crítica para cualquier desarrollador de software.

El desarrollo de software es 100% sobre la resolución de problemas.

Sin problemas no habría necesidad de software.

Todo el software está diseñado para resolver algún problema del usuario y dentro de esa solución general hay una amplia gama de problemas más pequeños que lo componen.

Realmente no importa qué lenguaje de programación o tecnología use, si no puede resolver los problemas, no será muy bueno en el desarrollo de software.

Es sorprendente lo mal que la mayoría de los desarrolladores están resolviendo problemas.

Constantemente escucho quejas sobre entrevistas de trabajo que son demasiado difíciles porque le piden al desarrollador que resuelva algún problema difícil.

He hablado sobre por qué las entrevistas duras son buenas y parte de la razón es porque prueban la capacidad de un desarrollador para resolver problemas.

Sé que muchos desarrolladores todavía no están de acuerdo conmigo sobre este punto y no entiendo por qué un sitio como TopCoder mejoraría tanto sus habilidades de desarrollo, pero sé por experiencia personal que fue la práctica de resolver problemas en TopCoder lo que fue el cambio. punto en mi carrera

Piensa en un carpintero. Si quieres ser un carpintero exitoso, probablemente deberías ser bueno cortando madera. Probablemente debería haber practicado hacer todo tipo de cortes y usar muchas herramientas diferentes para cortar madera.

No importa cuántos años de experiencia haya tenido en carpintería o qué tan bien pueda diseñar muebles o gabinetes si cada vez que intenta cortar madera tiene dificultades para hacer los cortes.

Cortar madera es una habilidad básica de la carpintería, al igual que la resolución de problemas es la habilidad básica del desarrollo de software.

Habilidad 2: Enseñarte a ti mismo

Probablemente no haya una habilidad más importante en la vida que aprender a aprender.

Esta habilidad es especialmente importante en el desarrollo de software, porque no conozco ningún campo de cambios más rápidamente que el desarrollo de software.

No se puede saber todo sobre todo. Ni siquiera puede invertir el tiempo que se necesita para dominar un marco o tecnología en particular: ¡las cosas se mueven demasiado rápido!

En cambio, necesita la capacidad de adquirir rápidamente el conocimiento que necesita para la tarea en cuestión.

Si realmente desea tener una habilidad que lo impulse a través de su carrera de desarrollo de software, aprenda a aprender por sí mismo.

La única forma de desarrollar esta habilidad es ponerla en uso. Sal y aprende un nuevo lenguaje de programación o tecnología, incluso si crees que nunca lo usarás. Se sorprenderá de lo rápido que puede recogerlo debido a la base que ya tendrá en lo que sabe.

Si puede adaptarse rápidamente al mercado de desarrollo de software que cambia rápidamente y a las tecnologías y plataformas asociadas con él, tendrá habilidades que siempre estarán en demanda.

Aunque soy un poco escéptico de algunas de las afirmaciones de Tim Ferris, él tiene un excelente libro llamado 4-Hour Chef, que tiene excelentes técnicas sobre cómo aprender las cosas rápidamente. (Quería escribir un libro sobre este mismo tema).

Habilidad 3: Nombramiento

Cuando la gente me pregunta qué hago todo el día, en general digo “lee cosas que otras personas nombran y nombran cosas”.

Ok, nadie realmente me pregunta eso y realmente no respondería de esa manera, pero ciertamente podría.

El desarrollo de software se trata de describir lo metafísico. La mayor parte de lo que estamos construyendo no se puede ver.

Tenemos que construir en nuestras mentes un mundo entero con gerentes de autorización que acepten solicitudes de autorización y escupan la respuesta de autorización junto con repositorios de usuarios utilizando fábricas de usuarios para reunir nuevos usuarios.

Cada vez que escribes código estás nombrando cosas. Cuando lee el código que usted u otra persona ha escrito, obtiene la mayor parte de su comprensión sobre ese código a partir de los nombres de las cosas en ese código.

La mayoría de las veces puedo predecir con precisión el nivel de habilidad de un desarrollador mirando cómo han nombrado los métodos, variables y clases en el código que han escrito.

Un desarrollador que carece de la capacidad de dar buenos nombres a conceptos y datos en su código es como un traductor mudo. No importa si puedes entender algo, si no puedes explicarlo adecuadamente, en el momento en que deja tu cabeza, se va.

La mejor manera de mejorar esta habilidad es ponerla siempre en práctica. A menudo renombraré las cosas en el código que estoy leyendo para entenderlo. Cuando empiece a entender lo que está haciendo un método, cambiaré el nombre para que coincida con esa comprensión. Lo haré mientras leo el código, sin hacer cambios lógicos.

Cuanto más te centres en dar buenos nombres a las cosas, mejor te volverás.

Esto también es lo más visible de su código. Es difícil saber si su código es correcto o eficiente al mirarlo, pero si lo leo y puedo entenderlo, voy a asumir que sabe lo que está haciendo.

Habilidad 4: Tratar con personas

Enumero esto como el último, pero en muchos casos se podría decir que es la primera habilidad o la más importante.

Donde quiera que vayas hay gente.

A menos que trabaje solo y desarrolle software solo para usted, otras personas influirán en su carrera como desarrollador de software.

He hablado acerca de por qué es posible que no quieras criticar a alguien antes, pero hay mucho más para tratar con las personas que no molestarlas.

Siempre vuelvo al famoso libro de Dale Carnegie, “Cómo ganar amigos e influir en las personas”, porque este libro es muy importante para aprender a ser un ser humano exitoso.

Lo dije antes, pero si quieres desarrollar las habilidades de las personas, ¡lee este libro!

El problema básico es que los humanos no son criaturas lógicas, somos emocionales. Claro, nos gusta enorgullecernos de nuestra capacidad de razonar, pero la realidad es que la mayoría de las decisiones que tomamos están más influenciadas por la emoción que por la razón.

Lo que esto significa para usted como desarrollador de software es que, a menos que pueda tratar eficazmente con otros desarrolladores, gerentes e incluso clientes, enfrentará problemas constantemente a pesar de lo buenas que sean sus ideas o lo valiosas que sean sus habilidades.

Ser activo e involucrarse en la comunidad de desarrollo de software en general también puede ayudarlo inmensamente en su carrera. No se trata solo de redes, sino de dar a conocer su nombre y construir un buen Karma.

Hacer esto con éxito depende directamente de su capacidad para tratar con las personas. (¿Quiere tomar un gran atajo para aprender a tratar con las personas? Es simple. ¡Sea amable!)

¿Qué pasa con las habilidades prácticas?

¿Observe que no incluí nada en mi lista sobre una tecnología en particular o incluso una habilidad tan amplia como el desarrollo web o el desarrollo móvil?

Ciertamente es importante tener una base sólida en un par de áreas tecnológicas, pero cuáles son esas áreas no es tan importante como las 4 habilidades que menciono anteriormente.

Si puede resolver problemas, aprender cosas rápidamente, nombrar bien las cosas y tratar con la gente, tendrá un nivel de éxito mucho mayor a largo plazo que en la especialización en cualquier tecnología en particular.

Dicho esto, por supuesto, es importante aprender a fondo uno o dos lenguajes de programación y tener un área general de especialización, pero siempre y cuando no te alejes demasiado de lo habitual con esas opciones y te concentres en estos 4 habilidades importantes, estarás bien. (Incluso podrías aprender C ++.

La resolución de problemas y la persistencia son las habilidades más importantes. Sin embargo, no se enseñan directamente, por lo que los recoge en el camino.

Aparte de eso, la base de la programación es lo más importante que aprender. Las variables, el flujo de control, las declaraciones if / then y los bucles son necesarios en cualquier carrera de programación.

Más allá de eso, depende de su especialidad. Soy un desarrollador de bases de datos, y las clases de db que tomé me ayudan todos los días.

También tenga en cuenta que el maestro hará o interrumpirá la clase. Un gran maestro dirá cosas que te acompañarán durante años, harán que una clase aburrida sea interesante y te motivarán a aprender más. Un mal maestro te hará perder el tiempo con cada clase.

Soy un poco parcial porque solía enseñar este curso hace muchos años, y lo recomiendo encarecidamente.

Patrones J2EE (SL-500)

No se trata tanto de los patrones que enseña. Es el hecho de que enseña un razonamiento basado en patrones que transformará el software que desarrolle.

Tendrás que hacer algunos cursos básicos de habilidades de Java y practicar un poco antes de seguir un curso como ese.

Otro gran curso que solía enseñar que te hará diferente del resto es este curso.

Análisis y diseño orientado a objetos

“El curso de Análisis y diseño orientado a objetos utilizando UML combina efectivamente la instrucción sobre los procesos de desarrollo de software, las tecnologías orientadas a objetos y el Lenguaje de modelado unificado (UML)”

Esto supone que desea aprender un lenguaje orientado a objetos.

Estoy de acuerdo con el hecho de que probablemente la resolución de problemas es la habilidad más importante para ser un buen desarrollador de software.

Según yo, independientemente del dominio en el que trabajará el programador, un buen programador también necesitará alguna teoría de

  • algoritmos y estructuras de datos: cómo funcionan los algoritmos más comunes, cuál es su costo computacional, cómo calcular el costo de un algoritmo que diseñe, …
  • sistemas operativos: lo que sucede bajo su software;
  • ingeniería o diseño de software: cómo diseñar un software bien estructurado, para ser mantenible, fácilmente modificado e integrado con otros sistemas en el futuro;
  • bases de datos relacionales (también lo ayudará si va a usar estructuras de datos hechas a sí mismas o dbms noSQL);

Conocer estos temas es importante también para saber qué podría salir mal en un entorno complejo. Algo siempre saldrá mal y saber dónde enfocarse para localizar el problema podría ahorrarle mucho tiempo que tratar obstinadamente de encontrar una solución.

Por lo tanto, tomar tantas clases relacionadas con estos temas como pueda, puede ayudarlo a convertirse en un buen programador.

¿Matemáticas? No. En 43 años de programación, he usado las matemáticas dos veces, y nada que no supiera cuando tenía 13 años.

Probablemente, lo más importante es cómo analizar y resolver problemas, ya que la programación es la resolución de problemas. Pero, por lo que he visto en la web, no se enseña en la escuela. Aquellos que se aferran a sus trabajos el tiempo suficiente eventualmente aprenden a ver soluciones. (Aquellos que eventualmente no aprenden a ver soluciones no se aferran a sus trabajos por mucho tiempo, a menos que trabajen con alguien que lo haya hecho y esté dispuesto a hacer su trabajo por ellos).

Voy a hacer esto simple (hay millones de respuestas):

La primera clase de lenguaje de programación que tomas, suponiendo que nunca hayas programado antes.

Esa primera clase realmente le dará una idea vaga de cómo es la codificación, lo que realmente tiene que hacer durante su trabajo (parte de ella) y también le enseñará cómo aprender nuevas tecnologías . No será algo que aprendas conscientemente, pero comenzarás a ver muchos pequeños patrones que se pueden encontrar en todas partes en las nuevas tecnologías que vas a estudiar. El próximo idioma que aprenderá será mucho más rápido. Por lo tanto, esta clase le dará una gran habilidad importante: acelerar su proceso de aprendizaje, que posiblemente sea lo más importante (leer nueva documentación, estudiar nueva biblioteca, estudiar nueva tecnología, etc.)

No puedes ser programador si no aprendes a codificar al menos una vez, ¿verdad?

Soy un desarrollador de software con un MBA.

Irónicamente, las clases más importantes para mí no provienen del desarrollo de software. Siento que mis habilidades (incluso como desarrollador) mejoraron enormemente del MBA en lugar de la técnica y la codificación.

Para el punto de vista técnico, las lecciones más importantes provienen de otros profesionales en lugar de clases universitarias. Aunque, si tengo que limitarlos a solo clases universitarias, es el proyecto de todo el año el que creo que probablemente sea el más beneficioso. El proyecto de ingeniería de software de un año de duración lo ayuda a evaluar su capacidad para trabajar en equipo, así como todo lo que ha aprendido y más. Como un trabajo como situación.

~ Leon

Bjarne Stroustup considera que el cálculo es el más importante. Sin embargo, la teoría de conjuntos (ver cálculo – conjunto) es extremadamente significativa, por lo que personalmente califico el conjunto de arriba del diccionario. En el cálculo aplicado, todas las clases tienen un solo nodo (un nodo conjunto), por lo que Set aparece en primer plano en el disco. En el disco, un diccionario es como un conjunto de pares clave / valor, por lo que el diccionario es secundario al conjunto.

Lamentablemente, usted pensaría que sería “Ingeniería de software”, pero la mayoría de los IHE no cubren este tema en absoluto.

Yo diría “Matemática discreta” o, potencialmente, algunas de las clases de estructura de datos más avanzadas eclipsan a todas las demás al impartir habilidades generales de programación de software.

Muchas buenas respuestas.

Pero un factor importante que a menudo se pasa por alto es la comunicación. Toma un curso de comunicación si puedes. Puede ayudar a comprender las necesidades y explicar cualquier cosa mejor y más rápido. El peor error es cuando los requisitos (necesidades) no se entendieron claramente.

Yo diría que muchas de tus clases te ayudaron y es tu educación, no una sola clase …

Cualquier clase que te enseñe

  1. cómo googlear, leer y comprender …
  2. cómo formar un enunciado del problema
  3. como hacer una hipótesis
  4. cómo experimentar / probar dicha hipótesis
  5. la fortaleza mental para no rendirse hasta que tengas éxito

Ahora, solo para responder la pregunta, voy a decir que mi clase de ciencias de quinto o sexto grado me dio una buena introducción sobre cómo hacer 1–5 y el tiempo / aplicación de dichos pasos me ha permitido mejorarlos progresivamente.

Una buena clase de programación de computadoras en una reconocida facultad de ingeniería es la clase más importante en la programación de software.

Lo más probable es que las asignaturas optativas que hacen hincapié en el espacio en el que terminas. Podrían ser matemáticas, aspectos financieros, ciencias de los materiales, ciencias, diseño, contabilidad o diferentes cosas relacionadas con los negocios e incluso música / expresiones. Probablemente necesitará comenzar como una construcción de producto y no involucrarse realmente en el trabajo en esas áreas, las clases son probablemente el segundo enfoque más ideal para obtener ese aprendizaje espacial.

entrenamiento de prueba de software en línea

Estructuras de datos y algoritmos

Probablemente las asignaturas optativas que se centran en el dominio en el que terminas. Podrían ser matemáticas, economía, física, química, ingeniería, contabilidad u otras cosas relacionadas con los negocios e incluso música / artes. Es probable que desee comenzar como ingeniero de software y no obtener experiencia laboral real en esos dominios, las clases son probablemente la segunda mejor manera de obtener ese conocimiento de dominio.

Lo que la gente a menudo ignora y / o detesta.

Documentación. Comentando Corrección de errores y seguimiento. Trabajando en un proyecto como parte de un equipo de manera eficiente. Las cosas de codificación que puedes recoger; estas cosas te tienen que decir que hagas.

Estructuras de datos y patrones de diseño.

Patrones de diseño

No lo sé. ¿Enseñan determinación, persistencia y terquedad porque siempre han sido los que más me han funcionado?

Programación 101 😉

More Interesting

¿Qué haces a diario como probador de control de calidad exitoso?

Como ingeniero senior sin una educación CS o SE significativa, ¿cómo puede dar forma a su camino profesional para seguir subiendo la cuesta de grandes y desafiantes problemas técnicos?

¿Cómo debo implementar un proyecto de librería simple en Java? ¿Qué clases debo incluir?

¿Son realmente estresantes los trabajos de ingeniería de software o simplemente un mito?

¿Cuáles son las características del programa de capacitación en línea de garantía de calidad en H2kinfosys?

¿Es factible elegir cada nuevo trabajo de una manera que lo obligue a cambiar toda su pila de tecnología?

¿Qué secuencia de instrucciones de pila usarás para rotar el contenido de los registros R0, R1 y R2?

Si ya tengo un trabajo como ingeniero de software, ¿debo especializarme en ciencias de la computación aunque no aprenda mucho?

¿Los desarrolladores de PHP pagan más que los probadores de automatización?

¿Cómo ayudan los seniors a los juniors en ingeniería?

¿Qué es el desarrollo basado en pruebas?

Si la ejecución lo es todo, ¿qué sucederá cuando la mayoría de los buenos programadores del mundo no estén en los Estados Unidos?

¿La experiencia de ingeniería de despliegue en Palantir explicaría la experiencia como ingeniero de software? ¿Se podrá hacer un cambio de Palantir (ingeniero de despliegue) a Google (ingeniero de software)?

¿Las pruebas de software son más fáciles en comparación con la codificación / desarrollo en el campo del software?

Dada la falta de empresas de Internet de consumo altamente exitosas en la pila .NET, ¿por qué Microsoft no hace un mayor esfuerzo para lograr la adopción de .NET entre las nuevas empresas emergentes orientadas al consumidor?