Descargos de responsabilidad (Lea antes de saltar para responder):
He visto varias preguntas similares a la que me gustaría hacer, así que aquí hay algunas preguntas similares .
En mi humilde opinión, no son completamente lo que estoy preguntando, ni son tan minuciosos como espero ser (no me refiero a ignorar las respuestas a las preguntas a continuación, ni estoy desacreditando a los que preguntan, solo quiero ser un poco más completo):
¿Puede un título de CS beneficiar a un programador mayor?
¿Importancia del grado de CS al solicitar trabajos de desarrollo?
Déjame ser claro, no estoy preguntando lo siguiente:
- Cómo enseñarme a programar desde cero (sin un título en CS)
- Cómo comercializarme como un buen desarrollador de software (sin un título en CS)
- Cómo obtener un excelente trabajo bien remunerado como desarrollador de software (sin un título en CS)
Un pequeño contexto:
Ahora que tengo las renuncias de responsabilidad, permítanme desarrollar mi pregunta, comenzando con una breve historia de mi experiencia como desarrollador de software.
En primer lugar, he sido increíblemente afortunado. Me dieron varias oportunidades de trabajo (un par de proyectos PHP / MySQL de back-end pesados y varias aplicaciones WP7 en XAML / C #) a través de las cuales realmente aprendí todo lo que sé sobre el desarrollo de software. Casi todos los trabajos de desarrollo de software que he tenido fueron para los que no estaba debidamente calificado (y lo dejé claro a mis empleadores antes de que me contrataran). No quiero darme crédito donde no se debe, pero diría que la humildad perfecta prescinde de la modestia .
En casi todos los trabajos de desarrollo que he tenido, superé las expectativas de mi empleador y demostré ser un activo valioso. Por supuesto, hay excepciones 1 . Pero mi punto es que soy bastante inteligente y pude enseñarme lo que necesitaba saber para tener éxito en mi trabajo. Con cada trabajo que tenía, me estiraban más y más.
Asisto al campus de la Universidad de Washington en Seattle, y actualmente estoy en mi cuarto año con dos años restantes, trabajando en un título de matemáticas. Durante los diversos trabajos que he tenido (vea mi currículum si desea esa lista) También he asistido a la escuela como estudiante a tiempo completo.
Como creo que la mayoría de los desarrolladores estarían de acuerdo, estudiar los cursos de pregrado de educación general típicos, incluidos los cursos de programación introductoria PAGOS ABSOLUTAMENTE en comparación con escribir código real, construir productos reales 2 , trabajar con personas increíbles y afectar positivamente la vida de los usuarios 3 .
Entonces ... a medida que avanzan las cosas ... pasé mucho más tiempo y energía trabajando en lugar de concentrarme en mis estudios. A veces me desempeñé muy mal , pero en general pude mantenerme a flote con mis notas.
Sin embargo, el programa de informática en UW es muy , muy , muy , muy competitivo.
Entonces, no fue una sorpresa para mí cuando fui rechazado por el programa. Dos veces. Irónicamente, en la misma ventana de media hora en la que recibí el siempre cortés, aunque desalentador aviso de rechazo por correo electrónico, recibí una llamada telefónica de Amazon ofreciéndome una pasantía de verano 4 como SDE.
Al mirar a mi alrededor a otros 'hombres de mi edad (21), que comparten los mismos objetivos que yo en el desarrollo de software, me siento bastante bien acerca de dónde estoy, qué estoy aprendiendo, quién soy y qué Puedo hacer. Por supuesto, hay muchos, mucho, mucho más brillantes jóvenes de 21 años que yo, no quiero decir que destaque entre la multitud, simplemente que siento que no estoy abismalmente detrás del progreso de mi compañero promedio. .
Tengo confianza en mi capacidad para tener éxito en el mundo del software. Más importante aún, me siento confiado en mi capacidad y deseo de seguir creciendo, aprender y ser humildemente vergonzoso cuando realmente lo necesito.
Licenciatura en Matemáticas
Me encuentro buscando un título en matemáticas con el único propósito de tener un título. Hay quienes dicen que debería abandonar y comenzar a trabajar ahora (como he tenido la oportunidad de hacer), y hay quienes dicen que realmente debería terminar mi carrera. He decidido seguir adelante con mi título por razones completamente diferentes a las que cualquiera de los campamentos tiende a plantear, así que por favor no me aliente de una manera u otra al respecto. Considere el problema "cerrado" :)
* RESPIRACIÓN PROFUNDA * ... lo siento, esto es más largo de lo que esperaba.
En esencia, esta es mi pregunta:
- ¿Cómo determino objetivamente qué áreas de estudio, conocimiento general y otras habilidades habría adquirido a través de un título de CS que me pueden faltar o no ahora?
¿Cómo clasifico estas habilidades en el orden de mayor importancia?
¿Cuál es la mejor manera (en los próximos dos años) de complementar mi educación para lograr esos atributos de tal manera que iguale o incluso supere el nivel de un estudiante de CS de una universidad superior?
Estos son los pasos que ya estoy tomando:
- Pregunta a la comunidad de desarrollo (esta publicación)
- Buscar tutorías con desarrolladores experimentados que compartan una carrera profesional similar conmigo
- Definir objetivos de "aprendizaje" a corto y largo plazo y programas de estudio posteriores que describan los temas de estudio
- Continuar escribiendo código y trabajando en proyectos que me apasionan
Si has llegado hasta aquí, te mereces una galleta :) Te agradezco que hayas estado conmigo.
Entonces ... comunidad de desarrollo, desarrolladores experimentados, compañeros estudiantes que están en el mismo barco que yo, ¿qué consejo le darías?
Además ... tenga en cuenta mis descargos de responsabilidad en la parte superior de esta publicación sobre lo que NO estoy pidiendo.
Actualizar:
Me doy cuenta de que no proporcioné parámetros muy concretos para lo que considero una "respuesta" exitosa a mi (s) pregunta (s). Creo que la pregunta es muy vaga y podría justificar una serie de respuestas "correctas".
Después de un período de tiempo razonable, seleccionaré la respuesta que se ajuste a los siguientes atributos:
- Explica por qué detrás de su respuesta.
- Puede hablar desde cierto nivel de experiencia (ya sea contratando / interactuando o siendo alguien que tiene / está en mi lugar)
- Es conciso pero exhaustivo, ofrece principios amplios, preferiblemente junto con ejemplos específicos
- Por último, teniendo en cuenta la longitud que parece requerir la coincidencia con lo anterior, haga que sea una buena respuesta bien comunicada y agradable de leer. Espero que otros que puedan estar interesados en esto en el futuro se entretengan y eduquen con la respuesta.
Así que hay algunos parámetros para "corregir". Creo que son muy altos, pero los diseñé como una especie de esquema para lo que imagino que sería la "mejor" respuesta. Obviamente, dado el tiempo suficiente, seleccionaré la respuesta coincidente más cercana como la "respuesta".
(1) - Trabajé en una versión anterior de este sitio web, y aunque no teníamos una explícita conversación al respecto, sentí que no podía hacerlo muy bien (esto puede ser evidenciado por el hecho de que desde entonces han cambiado su sitio web por completo) (2) - En primer lugar, sí, es un producto real (aunque estoy escribiendo esta publicación en Chrome ...), y Se patea el culo. En segundo lugar, yo era un desarrollador interno de escuela secundaria en prueba, escribí una prueba de código conceptual para algunas de las nuevas características para IE8 ... así que fue hace un tiempo. (3) - En el momento de esta publicación, soy el desarrollador que escribió esta aplicación, ya no soy responsable de su código base (4) - Mi pasantía comenzará en junio de 2012, y estaré trabajando en la tienda web equipo.
Respuestas:
De acuerdo, me parece demasiado tentador no responder a su pregunta, así que aquí estoy ...
Algunas cosas sobre mí primero
Tengo 26 años y, gracias a mi padre (por cierto, matemático y actualmente trabajando como profesor), desde una etapa muy temprana de mi vida tuve la oportunidad de estar cerca de las computadoras. (en 1986, cuando nací, aunque no era lo más común en aquellos días, siempre teníamos una o dos computadoras en casa). Dicho esto, y, obviamente debido a mi naturaleza curiosa y orientada a las matemáticas / resolución de problemas, no pasó mucho tiempo antes de que me enamorara de la programación. Primero con Pascal, a la edad de 7-8 y luego casi todo lo demás acaba de seguir.
Primero, permítanme decir que, mientras estaba en la escuela, siempre me había destacado en todo lo relacionado con las matemáticas, simplemente porque me gustaba, y sinceramente, podía seguir fácilmente el ejemplo de mi padre y convertirme en matemático también. Pero eso no sucedió.
Lo que sucedió fue probablemente el mayor error de mi vida (hasta ahora): ¿cómo lo llamarías cuando alguien enamorado del código , que habla más de 15 idiomas y ha escrito miles de líneas de código (desde compiladores hasta micro-núcleos y web)? marcos) a la edad de 18 años, de repente (las razones aún son demasiado oscuras en mi mente, pero la influencia general, incluso sutil, de su entorno nunca es demasiado insignificante) decide seguir una carrera en medicina ? Supongo que es un "error".
¿El resultado? 5 años después (a los 23), y 1 año antes de terminar mi título de médico (todavía trabajando en proyectos de programación de código abierto personal como pasatiempo todo el tiempo), decidí que ya tenía suficiente y decidí dejarlo. Y no era solo que odiaba tanto este nuevo campo (Medicina), sino también que había algo inquietante en toda esta situación, una picazón insaciable escondida en el fondo ... ( ¿qué hubiera sido si ...? ) Además, me había dado cuenta de que mi pasatiempo , lo que consideraba genial pero que ni siquiera había imaginado como un trabajo real, no solo podía traer algo de dinero, sino que también me brindaba mucho + me mantenía feliz como individuo. Entonces, decidí dejarlo. (= la mejor opción, aunque sea un poco tarde, lo he hecho alguna vez).
Entonces, aquí estoy ahora, un psiquiatra que alguna vez fue médico (al borde de un colapso nervioso, para ser precisos; ¡estúpido!) Que se graduó en CS (en mi tercer año en realidad; y, sinceramente, perseguirlo para no terminar careciendo de esas temidas calificaciones típicas ...) y un profesional más que feliz trabajando en algo que adoro y definitivamente el tema sobre el que tengo que ofrecer más.
Algunas observaciones (desde mi propia experiencia)
La programación es uno de los pocos campos donde los realmente buenos siempre encontrarán su camino, pase lo que pase. Y esto definitivamente NO es una cuestión de calificaciones típicas (honestamente, si tuviera una empresa y quisiera reclutar programadores, puedo decir fácilmente quién es bueno en cuestión de minutos, independientemente de si tiene algún grado o no)
Lo que se necesita para ser un buen programador es: inteligencia orientada a las matemáticas (pero NO las matemáticas en sí) y pasión (eso hará que las interminables horas de estudio sean un placer en lugar de una carga; e, incluso si no me he dado cuenta de eso, confíe yo he estudiado TONELADAS de material sobre el tema en mi vida, solo por mi cuenta) . La educación formal es algo agradable, pero está un poco sobrevalorada. Los ingredientes centrales del éxito son los dos primeros.
Matemáticas es definitivamente donde nació CS. Pero CS ya no es solo matemática. Siempre he tenido un cerebro fuerte orientado a las matemáticas, pero de ninguna manera soy un gurú de las matemáticas. Y honestamente, en la programación diaria, (a menos que estés en la construcción de un motor gráfico o algo demasiado localizado) lo más probable es que nunca necesites nada más que simple aritmética (suma, resta, multiplicación, división, módulo) y algunas cosas sobre matrices (muchos estarán en desacuerdo conmigo, probablemente matemáticos o programadores demasiado orientados a lo académico, pero definitivamente dominar el cálculo NO es lo que se necesita para ser un buen programador). Tener un buen historial matemático puede ayudarlo, pero NO debido a las matemáticas en sí mismas; te ayudará únicamente en base a una cosa común que comparten estos dos campos: habilidades para resolver problemas.
Las matemáticas son una ciencia (y una ciencia que respeto).
La programación es un arte. (Y también una ciencia aplicada, si insiste) Pero tenga eso en cuenta: un arte, y así es como siempre lo he tratado. Y como con todas las artes, no se puede enseñar. Puedo enseñarte la forma formal de dibujar una cara y hacerte mejor que el promedio, pero eso no te hará ni un Da Vinci ni un Klimt. Mona Lisas están pintadas por Da Vincis, y no por pintores cuidadosamente educados. Gran código está escrito por grandes artistas de código. Y la habilidad y la devoción pueden superar fácilmente la educación formal.
Entonces, ¿qué se necesita para convertirse en un * realmente * buen programador?
En sus preguntas
Sin embargo, tendría que saber realmente qué incluye el título de Matemáticas, permítanme resumir lo que probablemente se perderá de un título de CS (como cursos / asignaturas / etc., inspirados en el programa de estudios de mi universidad ) sin ningún orden en particular. :
Saber qué priorizar en un campo siempre cambiante como CS siempre será una apuesta: un juego de adivinanzas .
Conozca lo que quiere hacer y confíe en su instinto. Por supuesto, tener un conocimiento básico sólido es imprescindible. Pero en lo que profundizarás, depende totalmente de ti. Además, planifique su carrera con cuidado: si quiere ser empleado, elija su objetivo y sea excelente (p. Ej., Querer ser empleado de Google y no saber cómo leer un simple script de Python es probablemente una de esas situaciones prohibidas). ) . Si está comenzando algo por su cuenta (una empresa), entonces no tiene un "jefe" que satisfacer; solo elige lo que más te convenga.
Por ejemplo, si desea hacer algo relacionado con la web, definitivamente le aconsejo que elija: PHP / MySQL / HTML / CSS / JavaScript (+ jQuery / AJAX) . Pero solo soy yo. A alguien le puede gustar (o ver más futuro en) Ruby / Rails que en PHP.
Yo, por ejemplo, ahora estoy codificando principalmente en Objective-C / Cocoa . ¿Te aconsejaría que persigas eso? Definitivamente no. Es decir: a menos que esté interesado en Mac o quiera una carrera en la venta de software relacionado con Mac / iPhone. Si está interesado en el desarrollo de Windows, elegir C # / .NET Framework probablemente sea su mejor opción. (si desea tener una idea de lo que más me gusta, solo eche un vistazo a mi perfil de StackOverflow )
Estudia mucho (libros, internet, código de otras personas, lo que sea) y escribe tanto código como puedas.
Ah, e intenta conseguir un trabajo en cualquier cosa relacionada con el código. (Primero comencé a trabajar como profesional independiente y ha sido una experiencia realmente valiosa, solo para ver cómo funcionan realmente las cosas en el mundo real).
Solo mis .2 centavos amigables ... :-)
Nota al margen: Sé que algunos de mis puntos pueden parecer controvertidos, y estoy seguro de que habrá muchos que no estarán de acuerdo conmigo. Eso es aceptable Pero eso no cambia la forma en que veo las cosas, y especialmente las cosas que amo.
fuente
Explore el plan de estudios del departamento de CS en UW, pida prestado y explore la lectura requerida, vea los exámenes anteriores y los ejercicios de laboratorio (tareas escolares). Si no tiene idea de cómo abordaría el problema, tiene un vacío en su conocimiento.
Piensa en qué tipo de programación te gustaría hacer en el futuro. Si está contento de crear sitios web y aplicaciones CRUD, parece que ya tiene todo el conocimiento que necesita.
Educación CS entra en escena si está interesado en la comprensión de cómo las bases de datos, servidores web, compiladores e intérpretes, sistemas operativos, protocolos de red, etc trabajo [distribuidas] bajo el capó , y está interesado en la construcción de estos sistemas usted mismo.
No lo sé. Para mí, el mayor beneficio de la universidad fue 1) ampliar mis horizontes (he olvidado el 90% de los detalles que aprendí en la universidad, pero recuerdo conceptos e ideas), y 2) mantener mi motivación intrínseca para aprender menguante: es más fácil mantener la motivación cuando trabajas hacia un objetivo: examen, otro examen, etc. hasta que te gradúes. (Además, estructurar la autoeducación no es una tarea fácil).
[Agregado: elija una universidad cuyo programa de CS le gustaría seguir, elija cursos en temas que le interesen y revise el currículo usted mismo: tareas, exámenes, etc. La mayoría de los cursos publica diapositivas de conferencias y tareas / exámenes de años anteriores .]
Sin embargo, un consejo: NO renuncies a tu título en matemáticas. Cualquier persona brillante puede aprender a programar, pero las matemáticas le darán una ventaja competitiva si alguna vez desea trabajar en aplicaciones que no sean CRUD / frontend, por ejemplo, simulaciones fluidas y mecánicas, gráficos por computadora, procesamiento de imágenes, reconocimiento y aplicaciones de aprendizaje automático, (¡incluso finanzas!) etc.
ACTUALIZACIÓN 2 - experiencia [larga]: obtuve una maestría en la facultad de EE: los primeros dos años fueron un plan de estudios común (física, ingeniería eléctrica, electrónica analógica y digital, y mucha matemática - álgebra lineal; matemática discreta; real, vector y análisis aplicado complejo.) Esto fue muy valioso, especialmente. la parte de EE y electrónica: me permitió trabajar en proyectos mixtos de HW-SW, y cooperar con los diseñadores de HW fue muy emocionante. No aporté nada al diseño de HW, pero pude seguir al diseñador de HW "depurando" su diagrama esquemático y hacer preguntas sensatas [no estábamos seguros de si el error estaba en SW o HW - resultó que estaba en HW: -)].
Luego las líneas se bifurcaron y elijo la línea CS. Algunos de los "detalles" contribuyeron a arraigar los conceptos (por ejemplo, "ejecutar" el algoritmo de Dijkstra a mano). También aprendí detalles sobre cómo funcionan las CPU (señales de bus, interpretación de diagramas de bus, ejecución, etc.) en el ejemplo de Motorola 68000 obsoleto, pero los conceptos aprendidos a través de los detalles tampoco son muy diferentes para las CPU modernas.
Otros detalles, esp. Las implementaciones de SW (por ejemplo, la implementación de Dijkstra) fueron para mí [ya que me he vuelto bastante bueno codificando en la escuela secundaria] un ejercicio inútil en la depuración y contribuyeron CERO a la comprensión de los conceptos.
Y luego me inscribí en el programa de doctorado, donde tuve que tomar cursos obligatorios. La elección de los cursos me decepcionó, ya que muchos de ellos parecían estar más orientados a las demandas de la industria (por ejemplo, usar Python para el análisis de datos científicos; gracias, puedo programar y soy muy capaz de enseñarme eso). - que de nuevo implicaba una gran cantidad de codificación sin sentido) que hacia la enseñanza de conceptos fundamentales (afortunadamente, busqué cursos sobre optimización discreta, análisis estático de programas y análisis formal con Promela).
Entonces, algunos detalles fueron útiles para arraigar conceptos, y otros fueron una carga innecesaria (otro ejemplo: programar la comunicación del puerto serie entre dos computadoras. Ya estaba acostumbrado a leer e interpretar especificaciones HW y programar HW a través de registros, así que fue justo. aburrido. Tal vez soy ingenuo al suponer que los ingenieros de CS que se convertirán en promedio no necesitan ser educados sobre cómo leer documentos HW).
En conclusión: exponerse a muchos conceptos diferentes (ideas de alto nivel) y entrar en detalles para aquellos que desea priorizar y llegar a ser extremadamente bueno. [¡NO PUEDES ser extremadamente bueno en todo!]
fuente
Entrevisto y participo en el reclutamiento de muchas personas jóvenes recién salidas de la universidad. Todavía tengo que contratar a alguien en función de las habilidades temáticas que aprendieron del programa que tomaron. La razón de esto es simple: ningún programa de CS (o cualquier otro programa) que haya encontrado enseña habilidades concretas relacionadas con la programación o el desarrollo de software a nivel profesional y comercial . Ser capaz de desarrollar modelos y soluciones para ecuaciones diferenciales complejas y escribir algoritmos de clasificación optimizados para propósitos especiales puede tener valor académico y / o científico, pero no tiene relación con el desarrollo general de software.
¿Qué busco entonces? Bueno, espero que un graduado universitario haya perfeccionado el arte de aprender. Después de todo, eso es lo que una buena universidad debería enseñar a sus estudiantes. Cómo analizar y desglosar los problemas generales en componentes lógicos y discretos que son previsiblemente solucionables. Un enfoque metódico para encontrar, evaluar, organizar y aplicar conocimiento e información hacia una solución.
Además, busco personas que entiendan que un grupo de personas que trabajan juntas y se comunican valen mucho más que la suma de sus individuos. Eso requiere madurez y humildad y la capacidad de dar y pedir ayuda.
Entonces, para volver al alcance de su pregunta: si bien un título de CS podría mejorar sus posibilidades de obtener esa primera entrevista fuera de la universidad, creo que tiene poca o ninguna influencia en su éxito o competencia como desarrollador. Siempre he seguido la filosofía "contratar para la actitud, entrenar para la habilidad" y ha valido la pena.
Mi consejo: continúa con tu título de matemática si eso es algo que te interesa. Cualquier educación científica lo servirá bien, así que elija el que más le guste, ya que es en el que es más probable que se destaque. Luego, concéntrese en aprender las cosas importantes: cómo aprender, cómo analizar y abordar la solución de problemas en una forma estructurada, cómo interactuar y cooperar con otras personas, cómo asumir el liderazgo y la responsabilidad de la entrega de usted y de sus compañeros de equipo. El resto es solo tecnología y codificación, las herramientas del oficio. Esos, puedes y aprenderás por tu cuenta. Obtenga y estudie algunos conocimientos de uso general, como patrones de diseño populares y paradigmas arquitectónicos. Comienza a escribir programas para practicar. Elija una base de lenguaje y tecnología que esté bastante actualizada, pero no cometa el error de pensarlo ' es el último que aprenderás. Las herramientas y los idiomas cambian todo el tiempo, por lo que el desarrollo de software es un proceso constante de aprendizaje de todos modos.
fuente
respuesta 1
Si aprende algo nuevo de su estudio. Entonces puede decir objetivamente que ganó esto a través de un título de CS.
A1. El porque
Un título de CS conceptualmente se trata de aprender. Si uno regresa de un grado de CS sin diferencia neta, entonces su objetivo principal no se cumple. Los exámenes y los cursos son la medida "oficial" de lo aprendido. Sin embargo, la comprensión individual (¿he aprendido algo nuevo?) Debería ser una mejor medida objetiva.
A1. La experiencia
Ambos estuve en la academia y ahora trabajo profesionalmente. Elegí un Máster en Informática porque quería ampliar mi comprensión y me apasiona aprender.
Mi mundo se ha expandido como resultado de obtener una maestría en informática. Mi mundo también se ha expandido de trabajar profesionalmente.
Respuesta 2
La importancia es relativa a quién hace la pregunta y para qué situación. Si es para el crecimiento personal , entonces todo es importante. Si es para la industria, entonces cosas como algoritmos y buenas prácticas de software estándar / OOP son importantes.
A2. El porque
El "alcance" de importancia depende en gran medida del "contexto". Sin un contexto, los méritos de las habilidades son difíciles de clasificar.
A2. La experiencia
He encontrado que las habilidades obtenidas de "universidad" vs "en el campo" son diferentes. Las "habilidades" en la universidad son más "teoría", de la industria es más "práctica". Por esta razón, esta diferencia significa que las habilidades se clasifican de manera diferente en términos de importancia.
Respuesta 3
Empújese más allá del punto de ruptura, y cuando se rompa, continúe rompiéndose nuevamente.
¿Que quiero decir?
Si llegas a un punto donde no entiendes, entonces te has roto. Sigue aprendiendo hasta que lo entiendas. Luego, presiona más hasta que encuentres algo más que no entiendas (hasta el infinito) .
A3. El porque
Si solo aprende y permanece dentro de sus límites, solo estará "bien". No quieres estar solo "ok". Quieres ser el "mejor" que puedas ser. No puede alcanzar su potencial real si no empuja CONSTANTEMENTE más allá de su límite.
A3. La experiencia
Siempre voy a ser un estudiante de por vida, no voy a enumerar mi conjunto de habilidades actual, si tienes curiosidad puedes ver mi perfil.
Lo único que diré es eso. Nunca estoy satisfecho con mi conocimiento actual. Quiero volar más alto, ver más y profundizar.
fuente
Simplemente mire los requisitos de grado, luego busque el programa de estudios para cada clase.
Realmente no puede hacer esto usted mismo sin el beneficio de la retrospectiva. Diría que lo más importante que les falta a los programadores autodidactas es el análisis y diseño de algoritmos. El resto se puede recoger comida por partes.
Incluso si no es admitido en el programa, a menudo puede tomar clases de otros departamentos como asignaturas optativas. Una de mis clases favoritas fue una clase de proyecto de ingeniería aeroespacial donde trabajé en electrónica y firmware para un pequeño satélite.
También puede comprar el libro de texto que usa su clase deseada. Lo hice para un par de clases que no podía encajar en mi horario. Otra opción es el material de curso abierto MIT .
fuente
¿Por qué crees que un título de CS es tan importante para ser un programador exitoso ?
Lo que necesitas para ser un programador exitoso es:
Por lo general, el título de CS lo llevará a la industria, pero si no tiene la pasión y la sed de conocimiento, sufrirá y nunca será un buen programador.
Parece que ya entró en la industria, y sin duda parece que tiene tanto la pasión como la sed de conocimiento.
Lo que debes saber es seguir investigando, aprendiendo y ganando experiencia, y la industria sabrá apreciarte sin el título.
Un ejemplo de alguien con quien trabajo
uno de los desarrolladores de software que trabaja en mi equipo tiene una licenciatura en derecho ... después de unos años comprendió que no le gusta la ley y que quiere ser programadora. no pudo conseguir trabajo como programadora (sin experiencia, sin título), por lo que realizó un curso de informática de 6 meses, luego consiguió un trabajo y desde entonces es una gran desarrolladora.
fuente
En mi humilde opinión, no hay trabajos de programación (o trabajos de ventas o trabajos de administrador de sistemas, etc.), solo hay trabajos de resolución de problemas. Contratamos y pagamos a personas para resolver problemas, escribir código es solo una parte de resolver el problema. Sí, incluso las ventas son una forma de resolver problemas. Entonces, un título de Matemáticas demuestra que puedes resolver problemas y un título de CS.
De su publicación está claro que está obteniendo mucha experiencia / pasantías. ¡Excelente! No te preocupes por conseguir un trabajo después de la graduación.
Para intentar responder a sus preguntas:
clases? elija algunas clases teóricas de CS en lugar de clases de escritura de código. Encuentra algunas clases que no sean CS / matemáticas, por ejemplo. filosofía te ayudará a destacar entre la multitud
prioridades? aprende cosas nuevas (no solo clases fáciles que ya conoces a medias)
próximos dos años? hablar con la gente, aprender, construir relaciones, buscar actividades externas. (Los pasatiempos / deportes / pasatiempos fuera del trabajo / estudio son una pista para ver qué tan motivado está un solicitante).
Consejos finales: Gradúate tan pronto como puedas. Construye una red de contactos. Y el único trabajo seguro es crear tu propio trabajo. Busque ideas / oportunidades donde pueda comenzar su propio negocio. Buena suerte.
fuente
En primer lugar, permítanme decir que estoy muy feliz de que hayan hecho esta pregunta porque es una que me he hecho a lo largo de los años.
Creo que hasta ahora podría considerarme un poco exitoso en esta área. Tengo algo de experiencia universitaria y me gustaría terminar mi educación universitaria en Ciencias de la Computación, pero aún no me he merecido un título en este momento de mi vida. Sin embargo, he tenido bastante éxito en la ingeniería de software a pesar de esta desventaja (en 10 años). Sin embargo, tengo que ser honesto con usted, no fue necesariamente algo fácil de hacer (por supuesto, apostaría a que cualquier cosa que valga la pena no es la más fácil). También voy a decir que todavía no es lo más fácil. Hay muchas compañías por ahí dispuestas a darle una oportunidad al candidato adecuado, pero he entrado en contacto con otras que se opondrán a la falta de ese "sello de aprobación" de educación universitaria. Sin embargo,
Comenzó en .net en una empresa muy grande. Como un pequeño no programador (trabajaba como representante de soporte técnico, en ese momento), aprendí todo lo que pude sobre los idiomas y las tecnologías utilizadas en la empresa para la que trabajé. Además, y esto es probablemente lo más importante, me conecté en red. Le envié un correo electrónico a cada persona que pude encontrar en el directorio que tenía Software Engineer en su título. ¿Estaba molesto? Probablemente. Siempre fui cortés y autodeferencial con ganas de aprender. Programaba almuerzos o simplemente los encontraba en la cafetería y me sentaba para tratar de tener una conversación. A veces era vergonzoso o me desaprobaban, pero al final, obtuve los resultados esperados. Pude obtener credenciales de poco tiempo para algunas bases de datos internas y después de un tiempo adquirí las credenciales necesarias para desarrollar software en su plataforma propietaria. Poco después, me encontré en una posición dentro de la empresa para prestar algunas habilidades en el desarrollo de herramientas internas para el equipo de análisis en el que trabajé en ese momento. A partir de ahí, siempre me esforcé por ser el tipo más inteligente de la sala de la manera más sencilla posible. Estaba ansioso y me aseguré de que todos lo supieran. Siempre intenté proporcionar una solución siempre que fue posible y descubrí que si lo intentas lo suficiente, hay muy pocos dominios de problemas que son imposibles de resolver (fuera de la teoría cuántica, tal vez). Me encontré en una posición dentro de la empresa para prestar algunas habilidades en el desarrollo de herramientas internas para el equipo de análisis en el que trabajaba en ese momento. A partir de ahí, siempre me esforcé por ser el tipo más inteligente de la sala de la manera más sencilla posible. Estaba ansioso y me aseguré de que todos lo supieran. Siempre intenté proporcionar una solución siempre que fue posible y descubrí que si lo intentas lo suficiente, hay muy pocos dominios de problemas que son imposibles de resolver (fuera de la teoría cuántica, tal vez). Me encontré en una posición dentro de la empresa para prestar algunas habilidades en el desarrollo de herramientas internas para el equipo de análisis en el que trabajaba en ese momento. A partir de ahí, siempre me esforcé por ser el tipo más inteligente de la sala de la manera más sencilla posible. Estaba ansioso y me aseguré de que todos lo supieran. Siempre intenté proporcionar una solución siempre que fue posible y descubrí que si lo intentas lo suficiente, hay muy pocos dominios de problemas que son imposibles de resolver (fuera de la teoría cuántica, tal vez).
Para concluir lo que podría ser una larga historia (y si estás en el Noroeste del Pacífico, me encantaría hablar sobre una cerveza), tuve mi "gran oportunidad" en una pequeña y pequeña startup que estaba dispuesta a darme una oportunidad . Cambiaron mi falta de experiencia por un salario un poco más pequeño y comencé a correr. Luego pasé de una pequeña tienda de desarrollo a la siguiente en los próximos años, ganando amistades y habilidades en el camino, hasta donde finalmente soy el desarrollador principal y director de una pequeña empresa de ingeniería.
Una conclusión clave aquí, si no lo he comunicado con la suficiente eficacia, es que tiene que conectarse en red. Haz amigos, toma unas cervezas y ríete, y encuentra personas que estén en el campo en el que quieres trabajar (preferiblemente dentro de tu grupo de tecnología de elección). Asegúrese de que las personas conozcan su voluntad de hacer lo que sea necesario y su entusiasmo por hacer el trabajo, sin importar cuán monumental sea. Básicamente tienes que "superar" tu falta de educación formal. Salta y diviértete con él. Esta industria es la mejor del mundo, en mi humilde opinión. He hecho amistades y contactos duraderos que me han ayudado de un lugar a otro y continuaré haciendo lo mismo por ellos cada vez que se presente la oportunidad.
fuente
Primero, déjame LOL en la estipulación "concisa pero completa" cerca del final de tu gran obra. Abajo a los negocios:
Como otros mencionaron, puede comenzar en el catálogo de cursos . Pero te animo a que salgas de los límites de esa lista. En realidad es bueno que te estés especializando en matemáticas. Muchos ingenieros con los que he trabajado no pueden recordar cómo realizar una integración simple, y nunca exploraron fuera de los muros del curso tradicional de matemáticas discretas de CS.
Esta respuesta parece bastante escasa en términos de detalles. No tengo un título de CS, y no me he encontrado sin las áreas necesarias. Sin embargo, deseo pasar más tiempo en otras cosas que me interesan. Historia, lingüística e inglés, por ejemplo.
Aprende lo que amas
¿Qué es importante para ti? ¿Qué es importante para los empleadores? Mi heurística personal siempre ha sido aprender lo que parece más interesante para mí - que necesita para el amor lo que haces; de lo contrario, te quemarás. El software es un campo de trabajo tan extenso que siempre parece haber un trabajo disponible para un desarrollador competente que se apasiona por cualquiera de estas habilidades.
Aprende a aprender y presiona
Supongo que eso me lleva a dos meta-habilidades que pondría por encima del resto: aprender cosas vorazmente y trabajar duro. Puede parecer cliché y dolorosamente obvio, pero la combinación es rara. He estado en todo el mapa en términos de habilidades "necesarias": front-end HTML / javascript, extensiones de lenguaje, desarrollo móvil, visión por computadora, administración de sistemas y viceversa, más de 7 idiomas. La única habilidad central verdadera en todo eso es haber hecho que superar mi propia ignorancia sea un hábito.
Realmente amo la filosofía de Jack White sobre guitarras y música (en serio, ve a ver eso), y creo que es sumamente aplicable al mundo de la programación. Ponga las cosas un poco más lejos de su alcance. Empujarse. Entonces parecerá fácil cuando todo lo que alguien quiere que hagas es tu trabajo.
Clases de CS no principales
Al igual que usted, el departamento de CS en UW me rechazó ... aunque creo que les dejé hacerlo por tercera vez antes de volver a mis cabales. Terminé con especialización en Informática y especialización en Matemática Aplicada. Pero todavía tomé toda la pista CS no importante. Eso es CSE 373, 410, 413, 415 y 417. Entonces, seguro que creo que primero debes seguir tu pasión. El mío me lleva a esas clases. Y creo que obtienes una educación básica bastante integral con ellos, aunque podría ser un poco ligero en el lado teórico de las cosas.
Ahora, aquí está lo bueno: con Informática, la mayoría de estos contaban para mis electivas requeridas. En el departamento de Matemáticas, es posible que deba obtener una aprobación explícita, y puede ser una exageración para cualquier persona que no sea CSE 417.
Invoque una consulta DARS (probablemente un enlace solo UWNetID) y vea dónde están las cosas. Solía hacer esto para varias especializaciones hasta la náusea .
Clases AMATH
En la misma línea, el departamento de Matemática Aplicada tiene algunas clases que podrían trabajarse como requisitos optativos. Incluso podrías ser menor en AMATH como el tuyo de verdad.
¿Por qué menciono esto? La computación numérica, por ejemplo, AMATH 301/352, es un gran misterio para la mayoría de los programadores. Si no obtiene nada más, podrá escribir publicaciones de blog interesantes . Pero afirmaría que conocer los problemas que rodean los tipos numéricos de un idioma y saber cómo medirlos y mejorarlos es muy importante.
¡Construye algo!
Lo más importante que puede hacer es construir algo nuevo. Tome una idea de principio a fin. No dejes que sea algo fácil que esté dentro de tu zona de confort.
Las clases de programación más fructíferas que tomé siempre tuvieron un gran componente de programación práctica. Para un ingeniero, la teoría es increíblemente importante, siempre que pueda convertirse en algo real. Así que ve a buscar un papel CS que suene genial e intenta implementarlo. Seriamente.
Consigue un trabajo
Ahora, ya mencionaste que tienes una pasantía en Amazon. Eso es genial. ¡La experiencia laboral real es realmente clave! Hay muchas personas con títulos de CS que no pueden programar su salida de una bolsa de papel mojada. Tener una buena experiencia laboral vale mucho más que un título.
fuente
Hay más de unas pocas historias de personas que se hacen millonarias antes de graduarse de la universidad, quizás la que más escucho es Bill Gates. Las personas con habilidades de nicho tienden a mejorar sin un título que el graduado de CS con sello de cookie.
Encuentra algo en lo que muy pocas personas están metidas, generalmente algo aburrido, tedioso o difícil de aprender, y aprende bien, obsesiona con eso. Algunas áreas de las que he escuchado son cosas de back-end de Unix (no Linux, aunque Linux no está muy atrasado en demanda), Flash (no sé lo suficiente sobre flash para recordar exactamente qué era, pero conozco a un tipo que se mudó se apresuró a saberlo y dijo que TODAVÍA hay un mercado para esto, principalmente porque la gente dice que está muriendo y no lo aprenderá). Es posible que necesite tomar algunas clases para comenzar, pero si conoce sus cosas y tiene una cartera impresionante, ¡hay negocios que lo necesitarán!
fuente