2009-06-04 14 views
10

Estoy trabajando escribiendo aplicaciones C# .NET para una empresa pequeña. Para aquellos de nosotros que no tenemos un título en programación, ¿qué hemos echado de menos que podría llevarnos años aprender a enseñarnos a nosotros mismos?¿Qué me he perdido al no estudiar computación?

Tengo una licenciatura en Ingeniería Electrónica, así que no es que dejé la escuela a los 16 y me senté con Visual Studio. He cubierto algunos C básicos incrustados en mis estudios, algoritmos, sistemas de control, matemáticas, etc. Siento que debe haber cosas que debería saber para hacer esto, pero no es así.

Respuesta

16

Soy un compañero EE, pero me dedico bastante a la informática, por lo que puedo hablar sobre temas cubiertos en un grado de informática que no están cubiertos en un grado EE.

Matemática discreta

Matemáticas para la programación es muy diferente de las matemáticas para la ingeniería. La única superposición obvia es la probabilidad discreta. Otros temas, como el análisis de algoritmos y la notación Big O, generalmente no están cubiertos en los cursos de ingeniería matemática.

Estructuras de datos y algoritmos

cursos de programación de ingeniería por lo general cubren conceptos algorítmicos simples como la recursividad y divide y vencerás (clasificación rápida y la FFT) y estructuras de datos simples, como listas y árboles enlazados. Un curso de informática sobre estructuras de datos y algoritmos cubrirá conceptos algorítmicos adicionales, como programación dinámica y estructuras de datos adicionales, como gráficos.

teoría de la computación

sé temas como la teoría de autómatas y la integridad (P, NP, etc.) definitivamente no estaban cubiertas de mi grado de EE.

+0

¡Su respuesta cubre las cosas correctas que provienen de un fondo EE! – Tim

+0

Sí, me gustaría añadir a esto, los cursos de algoritmos avanzados también. Realmente te permite ver la eficiencia ... – Irwin

2

Dejé la escuela a los 18 años sin ningún título y llevo 10 años programando profesionalmente con una variedad de idiomas. He hecho esta pregunta exacta de unas pocas personas que obtuvieron Comp. Sci. o grados de Ingeniería de Software. Hasta ahora, lo único que descubrí que me perdí fue la experiencia de vida general que se obtiene al asistir a la universidad.

Descubrí algunas personas que hicieron Comp Sci o similar y luego pasaron a una carrera en un campo no relacionado. Puede ser que un curso de Comp Sci te ayude a decidir si esto es realmente para ti.

+1

Me pregunto si podría decir eso si trabaja en un escenario donde las preocupaciones algorítmicas son muy importantes. – akappa

+0

La universidad podría ser un buen lugar para aprender algoritmos; Nunca he escuchado a nadie decir que me perdí al no haber aprendido eso, pero no conozco muchos juegos o programadores científicos. –

2

Es difícil saber qué se ha perdido ya que no se enseñan secretos en los cursos de programación que tampoco se pueden leer en otros lugares. Pero en mi experiencia, las personas sin la educación adecuada a menudo tienen problemas para captar conceptos como recursividad, orientación adecuada de los objetos, etc. Y también suelen usar su propio esquema de nombres, etc. en lugar de seguir una práctica común.

+1

Por supuesto, lo opuesto también puede ser cierto: a veces las personas con esta educación tienen dificultades para adaptarse a ciertas diferencias o restricciones de programación en el "mundo real". –

+0

Estoy de acuerdo con Colin, algunas personas "educadas" saben tanto acerca de la teoría que simplemente no pueden seguir los estándares –

+0

Verdaderamente, las personas educadas a menudo tienen dificultades para aceptar que en el mundo real las cosas no son tan fáciles y perfectas como estaban en teoría. A veces están tan seguros de sí mismos que intentan hacer que todo sea "perfecto", incluso si eso significa que su parte del programa se ve muy diferente a la del resto. Lo que obviamente es una mierda porque no importa qué tan malo sea el resto, la inconsistencia solo lo empeora. –

9

Bueno ... Big O notation se siente como una de esas cosas que normalmente se enseñan, pero que tal vez no puedas detectar por ti mismo.

Discrete mathematics también podría pertenecer a esa categoría, junto con statistics quizás. Esos también podrían estar en un grado EE, esta respuesta es quizás un poco pesimista. :)

+0

Los métodos discretos fueron una de mis partes favoritas del curso que hice, y todavía lo encuentro muy útil. –

+0

Debo decir que la notación de Big O es algo que puedes aprender y aplicar en solo un día, a menos que tu cerebro esté lesionado por las matemáticas;) – akappa

3

Una formación formal en investigación operativa, complejidad computacional, algunas cosas algorítmicas "avanzadas" (caché-obviedad, minería de datos, etc.) y una cultura sobre problemas de concurrencia, que normalmente se cubren en OS y cursos de programación. Tal vez incluso algunas buenas prácticas en programación, pero creo que ya lo has aprendido.

Esas pueden ser importantes o no, en función de su trabajo actual, pero creo que su título le permite estudiar esas cosas.

2

Con un título tendrá mejores oportunidades de obtener trabajos mejor remunerados. También habría aprendido muchas cosas teóricas, lo que ayuda mucho a identificar construcciones compartidas en diferentes marcos/lenguajes de programación. Una cosa que me ayuda más es la amplia información de fondo que recopilas mientras estudias. Puede responder muchas preguntas sobre temas mayormente desconocidos simplemente comparándolos con cosas más generales que haya aprendido antes.

0

Cuando escribe aplicaciones pequeñas, es algo fácil. Cuando los proyectos se agranden, se verá abrumado por problemas, si no sabe cómo aplicar arquitecturas, buenos diseños, etc. Cuando las personas estudian, también es una especie de práctica. Es más difícil convencer a los empleadores para que lo contraten si creen que usted está o podría estar todavía en la fase de estudio. También hay profesores calificados en universidades que conocen mucha información importante que quizás no hayas pensado por ti mismo, pero que podrían compartir contigo.

+0

Obtuve este trabajo con mi título de EE, pero he estado escribiendo software para apoyar el hardware por unos meses. ¡Todavía no estoy seguro si quisiera trabajar completamente en software! – Tim

+1

No estoy de acuerdo. Los programadores siempre deben continuar aprendiendo. Cualquier empleador que piense que he terminado de estudiar sería horrible para trabajar. –

+0

Cualquier persona en la industria de la Electrónica/Computación que no estaba interesada en aprender cosas nuevas pronto se quedaría sin trabajo – Tim

3

Probablemente lo único que se está perdiendo es alguna teoría, aunque habrá obtenido algo de eso con su grado EE.

El uso de la teoría en la programación práctica es muy debatido, por lo general con aquellos sin grados de un lado insistiendo que no les falta nada y aquellos con grados que afirman que son. Prefiero tomar la posición media de que no necesitas un título, no aprenderás secretos que son imposibles de encontrar en otro lugar y lo que aprendes no es necesario para una gran cantidad de programación comercial (como en la no académica) posiciones. Lo que hace es ayudar con muchas cosas, como saber por qué una tarea es difícil o imposible o cómo funciona una cosa en particular. También actúa como una buena base para construir el resto de tus carreras aprendiendo.

3

Creo que se trata más de la forma en que funciona nuestro cerebro: cómo analiza, busca/encuentra soluciones, etc. La diferencia entre el programador con un título y sin ella se suaviza a medida que pasa el tiempo y su experiencia se vuelve más importante/informativo/sólido para basar su pensamiento.

1

Empecé a programar profesionalmente a tiempo completo después de dejar la escuela en 1984, y no hice ningún curso relacionado con la informática de tercer nivel hasta principios de los 90. Los temas principales en los que me centré fueron la gestión en TI y las matemáticas discretas, que encontré muy útiles. La parte de la programación real era bastante débil, Pascal de la búsqueda de libros de texto de cosas. Algunas de las clases de bases de datos eran bastante buenas, sin embargo, normalización, algerbra relacional, etc ... como lo eran el análisis del sistema y el diseño estructurado.

Mi sensación es que sin un currículo rígido, es probable que omita gran parte de lo que podría pensar que es aburrido y que en realidad es muy útil.

4

Piense en lo que no se ha perdido: chicas, fiestas ... sólo una broma;)

Creo haber estudiado EE las únicas áreas que se necesitan para reforzar son los relacionados con la arquitectura del software: UML, patrones, diseño ...

Sí, hay otras áreas que echará de menos (compiladores, redes, etc.) pero el conocimiento que puede utilizar de ellas aprenderá a trabajar, no es gran cosa.

+1

Creo que los cursos de EEE probablemente cubren más redes que los cursos de CS. Hice un curso que cubría tanto EEE como CS, las clases de EEE eran mucho más profundas que las CS. El resto de tu respuesta es perfecta. –

+0

Ops, mi mal, no tenía idea de que cubrieran las redes de forma tan extensa. –

1

Simplemente adivinando su situación, por supuesto, pero a menudo encuentro que "Acabo de aprender a programar, y he estado practicando desde entonces" los programadores (una clase que me incluye, podría agregar) a veces son cortos en el herramientas suministradas por un curso de compiladores (ver Learning to write a compiler para obtener recursos). El reconocimiento de esto se apoderó de mí lentamente, pero mirando hacia atrás, esto es enorme.

Mi segunda preocupación para los programadores entrenados informalmente es entender cómo funcionan las computadoras en los niveles bajos, pero si está haciendo un trabajo integrado, me imagino que tiene (¡al menos!) Un buen comienzo en esa área.


supongo que suena inútil cuando (en los comentarios) describo esto como "el curso de compiladores de escritura". Después de todo, probablemente se dé cuenta de que no tiene la intención de escribir ningún compilador, por lo que está bien. Pero ese curso realmente proporciona un conjunto de herramientas poderosas y generales que puede aprovechar en muchas situaciones. Ver How much of the compiler should we know?.

+0

¿qué quiere decir con "curso de compiladores"? – Tim

+0

El curso sobre cómo escribir compiladores. Lexers, analizadores sintácticos y qué hacer con ellos. También hay muchos recursos en SO para estas cosas: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler y otros ... – dmckee

8

Asistí a una universidad, pero me especialicé en psicología y filosofía. Diez años después de dejar la escuela, recogí las computadoras como pasatiempo y pasé una gran cantidad de tiempo simplemente leyendo todo lo que podía tener y probando por mi cuenta.

Después de varios años, cambié de mi trayectoria profesional anterior y pasé a la programación profesional. Después de cuatro años de trabajo, terminé trabajando en una importante empresa de software en su instalación R & D. Mis compañeros de trabajo pensaron que tenía un M.S.en ciencias de la computación, aunque nunca me había presentado como uno.

Mi conclusión es que el conocimiento es conocimiento. Puede obtenerlo solo o asistiendo a la escuela. Lo importante es que lo tengas y tengas el impulso para seguir aprendiendo sin importar si estás en la escuela o no.

+0

"conocimiento es conocimiento" ... Me gustó ¡ese! – Kensai

2

Tengo títulos en EE y Comp Sci desde hace mucho tiempo :) Definitivamente hay cosas buenas que te obligan a aprender en un programa de grado en informática, pero no es todo. Hay cosas concretas que no se aprenden (varios paquetes de Java, que utilizan Studio para depurar, sistemas de control de origen, patrones utilizados en marcos específicos). Pero hay cosas que aprendes que son un buen conocimiento fundamental, aunque es posible que no te des cuenta en ese momento (algoritmos, etc. como lo han publicado las personas).

También cooperé (requerido en la universidad de ingeniería de U.Cincinnati) que fue una gran experiencia. Eso me hizo darme cuenta de que hay usos prácticos para algunas de las cosas aparentemente abstractas que se aprenden en clase, así que estaba más motivado en la escuela de lo que hubiera estado de otra manera.

Si bien considero que un título generalmente indica un cierto nivel de habilidad de fondo fundamental, así como un esfuerzo diligente, busco más cuando entrevisto. Y conocí a algunos excelentes desarrolladores que no tenían títulos, por lo que no siempre es necesario. Además, las universidades generalmente no cubren aspectos como los aspectos sociales de la ingeniería o el trabajo en sistemas muy grandes, y eso puede ser muy importante en muchas situaciones laborales.

Después de haber estado lejos por un largo tiempo, me doy cuenta de que es fácil olvidar lo que aprendí en la escuela o en el trabajo. Nuestra industria sigue cambiando, así que creo que leer en el campo es importante. Y creo que leer más ampliamente que solo las cosas técnicamente detalladas es importante. Es por eso que me gusta joelonsoftware. Hace poco encontré su sitio y los libros que ha editado/escrito mientras buscaba formas de aprender más sobre el desarrollo de software.

Así que recomendaría a todas las personas, tituladas o no, leer libros y artículos sobre desarrollo de software. Una de mis clases de posgrado en ingeniería de software nos hizo leer cosas como El Mes del Hombre Mítico, que es genial. También me gustan los libros sobre construcción de software, como McConnell's Code Complete.Joel tiene una buena lista de recomendaciones en su sitio:

http://www.joelonsoftware.com/navLinks/fog0000000262.html

4

En mi experiencia, 4 años de ver fragmentos de código o algoritmo pseudo-código ayuda a desarrollar un instinto para evaluar la elegancia técnica - se puede decir buenas ideas de malas ideas más rápido. Es valioso poder descartar una mala idea cinco minutos después de llegar a ella en lugar de después de cinco meses de intentar hacerla funcionar.

Cuestiones relacionadas