¿Qué ventajas tendría uno con un BS en Informática sobre un desarrollador autodidacta?

A2A:

Primero, permítanme estipular por adelantado que un buen desarrollador autodidacta probablemente superará a un mal estudiante de CS (es decir, uno que pasó por el programa haciendo lo mínimo para obtener un título). Entonces, hablemos sobre la diferencia entre un buen desarrollador autodidacta y un buen estudiante de CS.

Aquí hay algunas diferencias que vienen a la mente:

  1. El estudiante de CS comprenderá la teoría detrás de la computación. El desarrollador autodidacta solo tendrá su intuición sobre la computación.
  2. El estudiante de CS habrá estudiado una variedad más amplia de asignaturas de CS clásicas (compiladores, sistema operativo, base de datos, algoritmos, estructuras de datos, etc.). El programador autodidacta tendrá una base más pequeña de problemas que haya considerado durante su educación.
  3. El estudiante de CS tendrá un marco sistemático a través del cual comprenderá y analizará estructuras de datos y algoritmos. El programador autodidacta tendrá una bolsa más pequeña de trucos y técnicas (a diferencia de una comprensión organizada) y quizás no tenga la capacidad de analizar el rendimiento en abstracto.
  4. El estudiante de CS comprenderá la maquinaria informática y el diseño lógico a un nivel más profundo que el programador autodidacta.
  5. El estudiante de CS habrá estudiado cálculo, álgebra lineal, ecuaciones diferenciales y matemática discreta, y podrá utilizarlos para atacar problemas. El programador autodidacta habrá estado expuesto a algunas matemáticas discretas, pero probablemente no a las otras materias.
  6. El estudiante de CS habrá estudiado física.
  7. Es probable que el estudiante de CS haya escrito al menos partes de un compilador y un sistema operativo durante su educación. El programador autodidacta probablemente no tendrá.
  8. El estudiante de CS tendrá una hoja de papel que acredite su finalización de un curso organizado de estudio. El programador autodidacta no lo hará.

Soy autodidacta desde el principio y trabajé unos seis años como desarrollador antes de volver a la universidad. Estudié a tiempo completo y trabajé a tiempo completo durante dos años. Acedí a todos los cursos, mucho con la ayuda de mi experiencia laboral.

Tuve un trabajo bastante bueno trabajando como desarrollador de C ++ creando aplicaciones críticas de rendimiento (puedes llamarlas complementos para conmutadores telefónicos). Entonces, ¿por qué volví a la escuela? En lo personal, volví solo para ver si había aprendido algo mal y para ver lo que me había perdido enseñándome a mí mismo.

Cuando te enseñas a ti mismo, normalmente pasas el tiempo enfocándote en cómo puedes hacer las cosas prácticamente y no tanto en teoría. Si desea usar una base de datos, se enfoca en SQL e índices, pero no se enfoca en cómo se construye la base de datos o las teorías matemáticas detrás de una base de datos.

Por lo tanto, si obtienes un título, obtienes una comprensión más profunda sobre cómo funcionan las cosas bajo el capó y por qué las cosas se implementan como están. Eso es importante porque aprende las consecuencias de sus elecciones en su lenguaje de programación de alto nivel. Una sola línea de código puede traducirse en varias instrucciones para la CPU y, por lo general, eso no es algo en lo que pienses como programador autodidacta.

Los cursos que más me gustaron fueron sobre patrones de diseño (la primera vez que me presentaron a Gang Of Four), matemáticas discretas, bases de datos y “estructuras y algoritmos”, ya que eran algo que me había perdido.

Es cierto que puedes enseñarte esas cosas. Pero luego necesita la disciplina para realizar un curso completo y aprenderlo correctamente sin obtener ayuda de otros estudiantes o un maestro.

Un título en informática está diseñado para capacitar a los estudiantes en la teoría detrás de la informática. El plan de estudios de un título típico de CS puede incluir cursos complejos en temas como matemáticas discretas, algoritmos, lenguajes de programación, conceptos de redes, SO, diseño de compiladores, etc.

Su experiencia en programación puede ayudar , pero sepa que hay mucho más en un grado de CS que la programación.

El título universitario le brinda un rango más amplio para pensar, y también lo convierte en un buen analizador. la programación de autoaprendizaje lo convierte en un buen programador, pero el título lo convierte en un buen ingeniero en todos los aspectos de SDLC.

Espero que esto sea suficiente para que el programador entienda toda la estructura donde el programador carece.

El Grado en Informática me enseñó a continuación las cosas junto con la Programación.

1. Matemáticas y estadísticas (todos los días tengo que lidiar con la escritura de software financiero)

2. Diseño de electrónica y lógica (que me proporciona un conocimiento profundo sobre cómo el hardware interactúa con el software sin esta comprensión, es imposible entender qué está sucediendo detrás de escena y cómo)

3. Arquitectura del procesador (sin este conocimiento, escribir aplicaciones heterogéneas de alto rendimiento es bastante difícil, lo que le proporciona deficiencias subyacentes)

4. Sistemas operativos (sin conocer el funcionamiento interno de un sistema operativo, es imposible diseñar y desarrollar nuevos sistemas)

5. Algoritmos y su rendimiento.

6. Múltiples lenguajes de programación y sus ventajas.

7. Principios de programación como OOP, AOP, TopDown, etc.

8. Ingeniería de software (principio de diseño y metodología de prueba)

Es probable que un título formal sea una ventaja si se busca un trabajo en el gobierno o un trabajo con una gran corporación en una industria tradicional (una de más de 100 años, como la industria bancaria o la industria automotriz). Las instituciones que son muy antiguas y extremadamente grandes tienden a dar un alto valor a las calificaciones formales, como títulos y certificaciones con requisitos formales que deben aprobarse.

Un título obtenido en alguna universidad con una alta reputación también se valoraría altamente en ese lugar: un título de Stanford o Harvard contaría más que un título de la Universidad Estatal de Colorado en Pueblo (mi alma mater ), por ejemplo.

Si uno es autodidacta y está preocupado por esto, existen certificaciones de software que uno podría buscar y adquirir, lo que contrarrestaría (en parte) la falta de grado. El programa que recomendaría para la certificación son las certificaciones de la sociedad IEEE:

IEEE IEEE Certificación profesional

que tiene varias certificaciones que representan diversas especialidades en las artes del software. Si uno es joven, otra buena estrategia es usar sus habilidades para avanzar en la universidad y obtener un título por la noche. También se podría considerar completar uno de los MOOC de software (cursos abiertos masivos en línea) publicados por universidades famosas. Uno puede tomar el mismo contenido curricular provisto en MIT, por ejemplo) como un curso de código abierto. Simplemente estoy sorprendido por esto, y tengo la intención de hacerlo yo mismo en algún momento antes de morir.

Gracias, Gautham Elango por la solicitud de respuesta a esta pregunta.

La respuesta corta es que depende.

En mi experiencia, esto está determinado principalmente por los prejuicios y las preferencias de los gerentes técnicos superiores.

Además, hay muchos sabores diferentes de desarrollo de software.

Algunos fuera de mi cabeza:

1. Mantener una aplicación CRUD básica
2. Mantener una vieja base de datos empresarial
3. Construyendo productos móviles nativos desde cero
4. Construyendo backends altamente escalables para nuevos productos
5. Pasar por el proceso de escalar un sistema de fondo
6. Desarrollador web front-end
7. Desarrollador de aplicaciones de escritorio Mac
8. Desarrollador de aplicaciones de escritorio de Windows
9. Desarrollador de mainframe (sí, todavía tienen estos, especialmente los bancos detestan cambiar algo que funciona)
10. Desarrollador fascinado con los algoritmos de aprendizaje automático.
11. Desarrollador al que no le gustaría nada más que ayudarlo a construir y escalar la arquitectura de su servidor (DevOps)

No es necesario decir que si está creando un software de aprendizaje automático personalizado, es una conversación muy diferente a la que tiene si mantiene una base de datos empresarial.

Especialmente para los roles técnicamente más desafiantes, las compañías prefieren que tengas un título de CS, porque necesitarás hacer cosas que requieran esta comprensión teórica profunda. es decir, si nunca tomó clases de algoritmos, es posible que no pueda resolver un problema que requiera reducir el tiempo de procesamiento de un algoritmo a la mitad.

Si bien es poco probable que haya aprendido toda la teoría relevante a través del autoestudio, si puede demostrar que es la excepción y tiene un gerente de contratación inteligente y técnicamente experto, puede poner el pie en la puerta.

Si no tiene los antecedentes para uno de los puestos de desarrolladores más técnicos, siempre puede obtener un trabajo junior manteniendo las aplicaciones CRUD o lo que sea, y tratar de encontrar el desarrollador más inteligente de la compañía, ser asesorado por ellos y luego ascender dentro de la org.

Las principales diferencias que he visto (y, por supuesto, estoy a punto de generalizar, lo que significa que estoy equivocado) es que la persona con un título ha estado expuesta a una gama más amplia de temas (clasificación, búsqueda, bases de datos, programación). idiomas, herramientas, etc.). No tienen tiempo para profundizar en muchos de esos temas con ninguna profundidad, por lo que no necesariamente tienen más posibilidades de ser empleados instantáneamente usando uno de ellos, pero es más probable que sepan que existe una solución diferente.

La mayoría de los programadores autodidactas con los que he trabajado eran buenos en el área en la que decidieron enfocarse (algunos eran increíbles), pero cuando la resolución de problemas solía ver solo clavos que coincidían con su martillo particular (no podían parece entender, o confiar, que otra solución podría ser mejor, supongo porque no era familiar).

Debe decirse que me he encontrado con el programador autodidacta ocasional que intencionalmente había estudiado una amplia sección de lenguajes / herramientas / algoritmos, pero es de lejos la excepción y no la regla.

Por otro lado, me he encontrado con programadores con títulos avanzados que se han dejado caer en la rutina (“¡Python es la mejor herramienta para resolver cualquier problema!”, También han dicho cien programadores en Quora hoy).

La conclusión es que no hay una regla absoluta, las personas son individuos y necesitan ser evaluadas individualmente. Nunca afirmaría que una persona con un título es siempre el mejor candidato para un trabajo dado de lo que afirmaría que no tener un título siempre es mejor.

Como una persona que acaba de graduarse con distinción en Ciencias de la Computación (MSc), permítame decirle que programar a ciegas en .Net, Java, desarrollo web, etc. es un juego de niños, y es muy probable que sea el tipo de cosas que terminará haciendo Un desarrollador autodidacta.

He trabajado en una empresa que consiste principalmente en desarrolladores autodidactas (pasantías mientras hago mi BSc) y también he trabajado en empresas con graduados en su mayoría (después de MSc).

Por mi experiencia en la primera compañía, sé con certeza que cuando los desarrolladores autodidactas hablan de no necesitar un título para ser desarrolladores, generalmente se comparan con personas que tienen 2: 2 o menos (porque esos son los solo un tipo de graduados a los que están expuestos, ya que las personas con mérito / distinción van a mejores empresas).

Sí, de hecho, es posible ser tan bueno como los estudiantes que en realidad no aprovecharon al máximo la licenciatura. Sin embargo, si compara un desarrollador autodidacta (no senior) con un estudiante que obtuvo distinción, la brecha de conocimiento será bastante grande a favor del estudiante.

En términos de progresión profesional, el límite máximo para el desarrollador autodidacta es bastante bajo en comparación con el de alguien con una sólida formación académica. Un desarrollador autodidacta probablemente seguirá siendo desarrollador por el resto de su vida, y se le pedirá que obtenga un MSc si quiere dar un salto de desarrollador de software a arquitecto de software.

Por lo tanto, si desea un efectivo rápido y sin problemas, pero con menos perspectivas de futuro (lo más probable es que se quede para siempre con la programación en algo como .net, java, etc.), el desarrollador autodidacta es el camino a seguir. Sin embargo, si realmente quiere ser un desarrollador / arquitecto de primer nivel y realmente quiere hacer una diferencia, obtenga un título.

Por último, personalmente estoy involucrado en el campo de la IA, y este es un campo que realmente no puedes estudiar por tu cuenta. Hay muchas ramas en informática a las que no puedes unirte como persona autodidacta.

Por lo tanto, si tiene la motivación y es financieramente capaz de obtener un título, no hay razón para que no lo haga. La matrícula no es nada en comparación con el futuro que asegura.

Personalmente, no me importa mucho un grado o no cuando estoy entrevistando y contratando desarrolladores.

Sin embargo, lo que siempre me importa es el entusiasmo y, por supuesto, el interés genuino en el desarrollo de software.

Casi siempre también uso tareas de programación que el desarrollador puede completar en la comodidad de su hogar. Después de completar la tarea, proporciono comentarios y, a menudo, tengo una breve discusión basada en los comentarios o cualquier cosa que la persona quiera discutir.

Si tiene trabajo previo para mostrar o hablar, profesional o aficionado, ¡siempre lo valoro!

En mi experiencia, muy pocas partes del desarrollo profesional de software requieren un título formal.

La experiencia y la buena * comprensión * de los conceptos básicos del desarrollo de software es mucho más importante. Ambos se pueden lograr desafiándote a ti mismo. Especialmente hoy con muchos buenos recursos, tutoriales, etc. en Internet.

Más fácil de ser contratado. Por otro lado, el desarrollador autodidacta puede tomar cursos de aprendizaje en línea para obtener la acreditación. Si el desarrollador autodidacta también es un emprendedor que ha comenzado y administra su propio negocio de software, más poder para ellos. . varios desarrolladores de juegos han seguido este camino

  • La licenciatura
  • Redes
  • Evaluación (por tutores y compañeros)
  • Exposición a material difícil de tener como autodidacta
  • Informática mucho más grande que la programación

La mayoría de las ideas anteriores ya están expresadas en otras respuestas. En mi opinión, el mayor pecado de los desarrolladores autodidactas (o con una educación inadecuada) es la idea de que, dado que pueden programar, saben todo lo que necesitan saber. Un título no lo convertirá en un sabelotodo, sin embargo, le proporcionará una base en términos del ‘panorama general’ y lo ayudará con su aprendizaje posterior una vez que se gradúe.

Tengo un título de CS, pero no tengo “ventaja” sobre nadie que reconozca, al menos no técnicamente, tal vez hay una ventaja en la cantidad de respeto que recibes. Pero, de nuevo, escribe un programa genial y la gente puede admirarlo igual.

La universidad me enseñó muchas cosas interesantes que ahora uso en mi trabajo. Otras personas pasan su tiempo aprendiendo cosas diferentes relacionadas con lo que quieren hacer. Cualquiera que sea su origen, algunas personas son mediocres en lo que hacen y algunas personas son increíbles.

Es más como un árbol ramificado que como una escalera.

Como programador autodidacta, voy a probar lo que he visto en mi empresa. Los estudiantes de CS tienen un mayor conocimiento de cómo funciona el compilador, ya que la mayoría ha tomado una clase de compilador. Me parece que son mejores en la arquitectura de estructuras o sistemas.

No quiere decir que los programadores autodidactas no tengan tanta habilidad, generalmente solo un conjunto diferente de habilidades

Una licenciatura en ciencias de la computación es mucho más que la programación. Un título de BS ofrece una educación completa en todo tipo de temas, incluidos matemática, estadística, física y química. Otras habilidades cruciales incluyen escritura, presentación, investigación, informes. Un programa típico también incluirá proyectos grupales, donde uno aprende a trabajar en equipo.

Por supuesto, las empresas quieren contratar desarrolladores que puedan programar. Pero también están buscando personas que sean agradables, que muestren potencial para asumir roles de liderazgo y otras tareas más allá del desarrollo. Los desarrolladores senior deben poder articular y comunicar sus ideas de diseño en la planificación de proyectos a gran escala.

Hay tantas habilidades invaluables que uno adquiere de una licenciatura que es difícil enumerarlas.

Debe mostrar evidencia de habilidades relevantes para ser invitado a una entrevista. Un título de CS o experiencia en la industria se consideran pruebas razonables.

La ventaja de tener un título en informática es como pedir un plato de muestra. Obtienes una pequeña muestra de cada artículo y luego decides cuál vas a pedir sin dejar de saber a qué saben los demás.

Teniendo en cuenta que muchos cursos de ciencias de la computación (o materiales de video / texto grabados en los cursos del campus) se ofrecen en línea, no necesariamente tiene que haber ninguna ventaja, además del diploma real.

De lo contrario, nada puede impedir que un desarrollador autodidacta interesado siga varios cursos en línea con el mismo contenido o similar al que normalmente aprendería en la escuela.

Sin embargo, no existe un requisito específico para ser un desarrollador autodidacta. Eso significa que algunos pueden saber menos y otros pueden saber mucho más.

Si. Demuestra que está dispuesto a pasar años para aprender su oficio y que tiene un conocimiento profundo que le permite comunicarse de manera efectiva con sus pares. Si no está comprometido con su crecimiento y profesionalismo, ¿por qué un empleador debería estar comprometido con usted?