2012-01-20 10 views
5

Disculpas si esta pregunta es demasiado abierta para el sitio, pero me pareció el mejor lugar para formularla.Recursos para desarrollar habilidades de ingeniería de software

Soy un programador autodidacta con pocas matemáticas en su formación académica y que, a lo largo de una carrera de diez años, se movió lentamente de la creación de scripts web y desarrollo web a ingeniería de software intermedia y de nivel de datos . Como resultado, hay áreas de mi conocimiento y experiencia que son algo deficientes.

Después de una revisión reciente con mi gerente, se me indicó que superar estas brechas era lo único que se interponía entre mí y un ascenso a un puesto de ingeniero sénior. Sin embargo, para lograrlo, iba a tener que encontrar un enfoque estructurado para aprender y demostrar que había tomado en cuenta lo que necesitaba saber.

Personalmente, identificaría mis áreas de debilidad de la siguiente manera. Tenga en cuenta que el problema en muchos casos no es que no entiendo, técnicamente, cómo funcionan estas cosas, sino que no veo dónde está o no es apropiado aplicarlas. Por ejemplo, sé lo que es una Interfaz y, técnicamente, lo que hace, pero me cuesta diferenciar cuándo es apropiado usar una Interfaz sobre, por ejemplo, un grupo de clases de OO relacionadas que heredan de una clase base. Por lo tanto, es más una ignorancia sobre el buen diseño del software que su ignorancia técnica. Tengo problemas para apreciar, digerir y trabajar en cosas como sistemas poco compactos.

  • Interfaces
  • Delegados
  • patrones de diseño
  • arquitectura de red & protocolos

también que nunca he hecho algunas de las cosas de bajo nivel, como compiladores y cosas por el estilo. Me pregunto a veces si eso marcaría una gran diferencia en mi capacidad para escribir código, que no solo es efectivo sino que también está bien optimizado si conozco mejor este tipo de material.

A veces la preocupación de que no puedo identificar las debilidades en mi conjunto de habilidades porque no sé cómo hacer las preguntas correctas me irrita. Así, con la esperanza de que he enmarcado adecuadamente la cuestión, me gustaría que sus sugerencias sobre: ​​

  • Desde el sonido de lo que estoy en la actualidad carezcan ¿hay otros temas que deba considerar que mira?
  • ¿Dónde hay algunos buenos recursos para aprender este material?
  • ¿Hay algún curso estructurado y autodidacta que pueda estudiar y que sea relevante? No tengo, lamentablemente, tiempo para tomar una calificación formal.

Saludos, Matt

+0

Matt También asistiría a encuentros de noches basadas en .net. Lucho por llegar a todos (como tú tengo niños pequeños). Pero http://dotnetdevnet.com/ y http://cms.vbug.net/Regions/VBUG-Bristol/Bristol-Events.aspx son locales y muy buenos. –

+0

Matt, Estoy en una situación similar ahora. Cualquier consejo basado en tu experiencia. – jaamit

Respuesta

8

yo era un programador autodidacta no hace mucho tiempo, así que puede relacionarse con su posición. Desde entonces he enviado 10 millones de aplicaciones LOC, así que tuve que desarrollar el discernimiento. 3 cosas me ayudan a obtener la ingeniería de software: libros, código y personas.

En primer lugar, la buena ingeniería se trata de la belleza, la belleza de un diseño elegante, de un mecanismo eficiente. Debes desarrollar ese sentido de belleza y para hacerlo necesitas verlo y debatirlo.

Los libros como SICP, Refactoring, Head First Design Patterns y Beautiful Code son todos de bello/mejor código. La mayoría de las veces no se trata de un idioma per se (o de idiomas exóticos). El código completo también es interesante pero de alguna manera tiene un nivel más bajo.

La lectura en línea del código también es una buena manera de educar su gusto. No tengo ningún ejemplo en mente, pero este es un common question, debería encontrar fácilmente algunas ideas. Además, construir una aplicación ambiciosa (un juego, modelador 3D, servidor web, base de datos) es una buena práctica: es probable que lo rehagas 2 o 3 veces para tener una mejor arquitectura.

La gente también es muy importante. Si encuentra a/a pocos arquitectos de software apasionados para debatir, podrá confrontar su punto de vista sobre lo que es bello. Todavía estoy digiriendo una discusión que tuve con mi gerente hace unos años.

Esta "iluminación" es un proceso continuo, por lo que no se desanime y siga adelante. Un día, verá un código feo con una implementación alternativa obvia, uno que podría analizar y comparar objetivamente como mejor que el original.

1

Tener un proyecto de mascota por ahí que puede refactorizar continuamente ayuda mucho en la autoeducación.

Honestamente, me gustaría echar un vistazo a algunos de los cursos abiertos publicados por MIT o Caltech y similares. Escoge un tema que creas que te beneficiará y da una lección. Intenta comprender los conceptos lo mejor que puedas. A medida que continúa codificando y refactorizando su proyecto favorito, naturalmente comenzará a agregar cosas que está aprendiendo.

Mencionaste que nunca habías tocado los compiladores, dale una oportunidad a ese curso y ve dónde estás parado. Con docenas de programas completos de CIS disponibles en YouTube, es fácil encontrar un instructor que le guste aprender. Voy a tirar a cabo Introducción a Algoritmos según lo enseñado por Leiserson y Demaine como punto de partida:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/

Usted menciona "No, por desgracia, tienen tiempo para tomar una cualificación formal." Formal o no, tomará una buena inversión de tiempo para que esto suceda. Elija la mejor ruta para usted y quédese con ella. Asegúrate de poner en práctica tus aprendizajes para consolidar y hacer crecer tu comprensión.

Cuestiones relacionadas