Primero, ya busqué en el sitio y leí todos los temas anteriores "autodidactas versus universitarios". La mayoría de las respuestas defendieron que ir a la universidad era la mejor opción, por dos razones principales:
Ir a la universidad te da el papel, que es esencial para conseguir empleos, especialmente en tiempos económicos difíciles.
Ir a la universidad te brinda una sólida base de programación, que te enseña los principios que serán esenciales independientemente del idioma / camino que tomes después.
Aquí viene mi pregunta: no estoy preocupado por la razón 1 en absoluto, porque ya tengo mi propia empresa (creo sitios web / hago marketing de afiliación) y una situación financiera estable, por lo que estoy bastante seguro de que no necesitaré mirar alrededor. para un trabajo.
Sin embargo, estoy preocupado por la razón 2. Es decir, quiero asegurarme de que tendré una base de programación tan sólida como cualquier otra persona, y me pregunto si eso es posible con el autoaprendizaje.
Supongamos que me tomo mi tiempo para estudiar los conceptos básicos, como matemáticas discretas, diseño de algoritmos, lógica de programación, arquitectura de computadoras, ensamblaje, programación en C, bases de datos y estructuras de datos, principalmente utilizando libros, recursos en línea y mucha codificación. Digamos que paso 1-2 años cubriendo esos conceptos básicos.
¿Crees que mi base sería sólida, o aún faltaría en comparación con alguien que fue a la universidad?
Respuestas:
Absolutamente definitivamente. Si es posible. ¿Cómo puedo saber? ¡Porque lo hice!
Es difícil. No te hagas ilusiones sobre esto. Sin un tutor al que acudir cuando las cosas no funcionan, debe resolver los problemas usted mismo. Hay mucho que aprender y si no estás motivado o no estás lo suficientemente dedicado, no podrás hacerlo. Para mí, me resulta difícil estar motivado por algo, pero disfruto tanto aprender y programar que no tengo que pelear conmigo mismo.
Algunos consejos:
¿Cómo sabes cuándo has terminado? Bueno, la razón por la que emprendes un título es para que te conviertas en un experto en programación. Cuando está seguro de que puede escribir cualquier software con un tiempo razonable, entonces es un programador, pero eso no significa que deba dejar de aprender.
Por cierto, ahora estoy sufriendo desde el punto uno. Estar lejos de las empresas de desarrollo de software tampoco ayuda.
fuente
Creo que la designación más importante de College / University es enseñarle a aprender cosas por su cuenta. No importa si se trata de programación, física, química, matemáticas, etc. La universidad me enseñó a aprender sin la ayuda de nadie.
fuente
Algunas personas prosperan en entornos académicos e incluso requieren que aprendan (generalmente como una forma de motivación). Otros (como yo) no lo hacen e incluso pueden encontrarlos desagradables.
Tuve una larga carrera en software sin obtener un título. Hacia el final de esa carrera, estaba en un puesto de arquitectura y el arquitecto principal de mi proyecto dijo que mi conocimiento de software y ciencias de la computación (¡los dos no son lo mismo!) Fue fácilmente equivalente a tener una maestría de la Universidad de Waterloo (uno de las mejores escuelas de informática de Canadá).
Hay algunas deficiencias, por supuesto, en mi grupo de conocimiento. Mis habilidades matemáticas son suficientes para seguir el ritmo de lo que estoy aprendiendo hoy. Odio las matemáticas puras y, en general, no se puede decir que esté actualizado sobre lo último y lo mejor. Esto ocasionalmente ha dificultado mi comprensión de las cosas (como, por ejemplo, Haskell) hasta que logré mis habilidades matemáticas hasta un nivel suficiente para comprender los conceptos. Pero el hecho es que la información está disponible sin que yo esté cerca de una universidad CS o departamento de matemáticas. Todo lo que realmente puedo decir es que a veces mi secuencia de aprendizaje es subóptima: ocasionalmente tengo que dar marcha atrás y completar algún material fundamental antes de continuar con lo que estoy haciendo.
fuente
Creo que su base será sólida, siempre que tenga la disciplina para sentarse y enseñarse todas esas cosas y trabajar con los ejemplos. Tengo un título, pero es en Ingeniería, no en Informática. He trabajado con muchos programadores profesionales excelentes que se han enseñado a sí mismos todo lo que necesitan saber. El autoestudio es algo que necesitarás tener de todos modos para ser un buen programador, ya que siempre está surgiendo una nueva tecnología que no aprendiste en la escuela.
fuente
Como con la mayoría de las cosas en la vida, mi respuesta es sólida , depende de la persona . Creo firmemente que no se necesita una licenciatura para ser programador; sin embargo, según mi experiencia, la universidad tiene una tendencia a exponer a las personas a problemas e ideas que pueden no encontrar por sí mismas a través de estudios independientes.
Hoy en día, una persona motivada puede conectarse en línea y, gracias a fuentes como el MIT Open Courseware , organizó un curso de estudio independiente que le brindará una amplitud de conocimiento bastante amplia y esta amplitud de conocimiento que siento es Lo que hace un buen desarrollador. Sin embargo, alguien que no está tan motivado podría descubrir que puede aprender un solo idioma y que puede seguir su carrera profesional.
Como dije antes, siento que es la amplitud del conocimiento lo que hace a un buen desarrollador, ya que significa que ha estado expuesto a más problemas y ha desarrollado sus habilidades para resolver problemas. No necesita ir a la escuela para obtener esta amplitud de conocimiento, pero la escuela definitivamente ayuda a este respecto, ya que un buen programa de grado lo obligará a desarrollar una amplitud de conocimiento.
fuente
Como programador, encuentro que estoy jugando constantemente con API e idiomas no relacionados con el trabajo (Ruby on Rails, Python, Node.js, etc.). Hago esto más por interés que por trabajo. Tengo 2 títulos de asociado, pero incluso después de 10 años de programación en Java / JEE, encuentro que realmente extraño la teoría de un título de BS (Big O, Algorithms, Descrete Math, etc.).
Estoy tomando clases nocturnas a tiempo parcial para obtener mi BS en Sistemas de Información Informática, pero no hay mucha teoría CS ofrecida en este programa. Estoy obteniendo mi título principalmente para tener el "papel" ya que es más comercial que técnico, pero es mi única opción para las clases nocturnas.
Echa un vistazo a MIT Open Coursware . Es gratis y es un gran recurso para llenar los vacíos de la teoría CS / Math.
fuente
Creo que es una falacia pensar que la universidad / universidad, por definición, te dará una buena base de programación. Le enseñarán mucha teoría y muchas maneras diferentes de pensar sobre un problema. Eso está muy bien, pero convertir esa teoría en práctica es un conjunto de habilidades diferente.
La única forma efectiva de enseñar la aplicación adecuada de la teoría es mediante la tutoría y el hacer. En resumen, debe intentar aplicar la teoría lo mejor que pueda y confiar en alguien con más experiencia para que le dé una crítica constructiva o lo oriente en la dirección correcta. Su mentor no hará su trabajo por usted, pero lo ayudará a ser mejor en su trabajo.
No sería el desarrollador que soy hoy sin la ayuda de algunos buenos mentores al principio de mi carrera. Trabajar en proyectos de código abierto es una buena manera de encontrar mentores que estén dispuestos a pasar algún tiempo elaborando detalles. Al menos esa fue mi experiencia. También tuve un mentor en mi primer trabajo de programación que me ayudó a comprender cómo diseñar aplicaciones fácilmente extendidas.
Entonces, ¿hay beneficio para el colegio / universidad? Sí. Sin embargo, no están equipados para ayudarlo a convertir la teoría en práctica a menos que la tome usted mismo. Si comienzas a tratar de aplicar lo que estás aprendiendo mientras estás en la universidad, puedes comenzar a hacer los tipos correctos de preguntas que te ayudarán a comprender verdaderamente la teoría a un nivel más práctico. Si espera hasta que esté en el trabajo, acaba de retrasar ese importante proceso de aprendizaje.
fuente
Las personas tienden a sobreestimar la importancia de la base teórica, matemática y conocimiento algorítmico de la OMI. Las razones por las que los programadores presionan y entrevistan estas cosas son porque son "aficionados" a las matemáticas.
Ahora, por supuesto, hay algo de programación en la que es útil saber qué es una "máquina de estado" o cómo usar una búsqueda "Booyer-Moore". Incluso hay algunos problemas en los que puede ser útil conocer algunas matemáticas reales, como si está trabajando con cálculos financieros o simulaciones físicas.
Sin embargo, el 90% de la programación generalmente no es ninguno de estos, no muchos de nosotros estamos haciendo un desarrollo algorítmico hardcore. La mayoría de las cosas que necesita aprender las puede aprender a medida que avanza. No es necesario construir un gran edificio de cimientos, sino mantener una curiosidad constante sobre cómo resolver diferentes problemas.
Soy 100% autodidacta y nunca tuve ningún problema para aprender sobre algoritmos. He trabajado en sistemas financieros e incluso eso fue posible sin ninguna habilidad matemática teórica más profunda.
Ser bueno en la programación no se trata de fundamentos, se trata de expandir continuamente su caja de herramientas y el aprendizaje que obtiene es mucho más valioso cuando puede ponerlo en contexto de un problema que realmente necesita solución en lugar de solo investigación teórica pura.
No necesita saber todo en detalle, para eso están Google, StackOverflow y Wikipedia :) Sin embargo, debe conocer la existencia de diferentes herramientas y métodos para darse cuenta de que son utilizables y aplicables a su situación. También debe tener la experiencia de saber qué herramienta es la mejor para aplicar. Las bases generalmente se echan a perder en los principiantes ya que no tienen experiencia de por qué una herramienta en particular sería útil. Si tiene mucha experiencia, algunas cosas simplemente "encajarán" en su lugar.
Sin embargo, algunas cosas que recomendaría:
Si no lo ha hecho, comience a aprender sobre patrones de diseño, esa es la herramienta más práctica y universal en su caja de herramientas.
Lea algunas descripciones generales de diferentes algoritmos si tiene curiosidad, solo para saber qué hay allí cuando necesite uno.
Aprenda sobre paralelización y subprocesamiento múltiple (y algo de programación funcional). Ser capaz de soportar múltiples núcleos es importante hoy en día y pronto será poco costoso, por lo que es un conocimiento crucial.
Realice proyectos de hobby desafiantes y experimentales que impulsen su habilidad y lo obliguen a aprender cosas en contexto.
fuente
Una cosa con la que la universidad te ayudará es que puedes encontrar dificultades para aprender por tu cuenta, es la capacidad de leer y comprender trabajos de investigación académica, especialmente las matemáticas. Sin embargo, incluso esto se puede lograr por su cuenta, pero ayuda tener instructores y compañeros que lo guíen en el proceso de aprendizaje para obtener el conocimiento más rápido y más fácil.
Como programador general de sistemas de información, es probable que no lea los trabajos de investigación para que le vaya bien. Los sistemas de información actuales son bastante simples y la mayoría de los algoritmos intensos, como la búsqueda, la clasificación y la indexación, los realizan los sistemas de bases de datos. Mientras entiendas los conceptos, no deberías tener dificultades.
Si decide involucrarse en áreas de programación más difíciles, como el desarrollo de sistemas microoperativos, el desarrollo de compiladores, la inteligencia artificial, etc., tener la capacidad de leer y comprender documentos de investigación puede ser fundamental para implementar sistemas de manera rápida y eficiente.
En cuanto a poder aplicar el conocimiento, eso es muy individualista. Es posible que las personas que van a la universidad no puedan aplicar los principios también a alguien que no va a la universidad. Hay un viejo dicho que dice: "No importa lo que entra sino lo que sale".
En resumen, el conocimiento que obtienes al ir a la universidad puede ayudarte a comprender y comunicarte mejor con el mundo académico. Sin embargo, el conocimiento se puede lograr sin ir a la universidad. Tener un título hace que sea más fácil convencer a otros de que sabes lo que estás haciendo y que puedes entender los trabajos de investigación académica.
fuente
No creo que muchas personas obtengan una "base" tan buena a través del autoestudio como lo harían al ir a la universidad, al menos no en el mismo plazo. Dos años de leer libros al azar y jugar con problemas de juguetes en su tiempo libre no lo llevarán al mismo nivel que dos años de estudio enfocado con un plan de estudios organizado. ¿Te dará suficiente para sobrevivir? Muy posiblemente. Pero si realmente quieres "una base tan buena como cualquiera", te llevará más de dos años.
Para no desanimarte, ciertamente no sería una pérdida de tiempo. Simplemente no estoy terriblemente seguro de que muchas personas puedan reunir el equivalente a dos años de universidad en dos años mientras dirigen su propio negocio y tienen algún tipo de vida personal / familiar.
fuente
He estado desarrollando profesionalmente durante una década sin un título. Cuando entrevisto a personas, me interesa su capacidad para resolver problemas y codificar. Dicho esto, hay algunas compañías / roles para los que no soy elegible simplemente porque insisten en un título. Ciertas consultoras tienen esta política porque pueden venderlo por más a los clientes.
fuente
Si juegas el juego de los números, aquellos con un título obtienen mejores trabajos y paga.
No todos los que obtuvieron el título aprendieron / recordaron nada.
La mayoría de las personas no se tomarían el tiempo para aprender gran parte de la teoría / antecedentes / conceptos básicos como lo harían si fueran a la universidad. Quizás tus padres te apoyarían durante 4 años de autoestudio; todos los demás tienen que conseguir un trabajo.
El inconveniente sería que si tuvieras un título de CS y no lograras tener un cierto nivel, es posible que tengas poca potencia. Seamos realistas, si no lo obtuviste en 4 años de alimentación con cuchara, no lo entenderás de lado mientras mantienes presionado el trabajo a tiempo completo. Excepciones por supuesto.
fuente
Si realmente quiere ganarse la vida en el campo del desarrollo de software sin un título, le sugiero que se ponga en contacto con su universidad local. Obtenga de ellos una lista de los cursos que se requerirían para obtener un título. La gran mayoría de las universidades tendrán esa información disponible a pedido, así como una sinopsis / programa / lista de libros para cada uno de los cursos. Baja por esa lista. Busca los libros en cuestión. Vea qué temas cubren. Si ve algo cubierto que no comprende, compre / saque el libro y aprenda. Al final de ese proceso, al menos debería saber lo que sabe y lo que no sabe, y ser bastante competitivo con su graduado universitario promedio (que de todos modos puede haber dormido / engañado en algunos de esos cursos).
fuente
Si y no. Algunas cosas son brutalmente difíciles de entender sin un maestro. Por lo general, son las cosas más matemáticas.
Creo, y sigo creyendo, después de ayudar a comenzar CS Majors como TA, que cualquier persona sin retraso mental puede aprender a codificar en el nivel PHP / Java / C #. No es, fundamentalmente hablando, difícil.
Tampoco, para el caso, es el ensamblaje y las otras áreas tecnológicas que mencionas. Esos son detalles de implementación que es bueno saber.
Las estructuras de datos, algoritmos, diseño digital, arquitectura de computadoras y álgebra de bases de datos son bastante difíciles, si el aprendizaje es profundo.
fuente
No tengo dudas de que una persona motivada y dedicada podría lograr una base sólida, pero si elige no obtener un título, se perderá muchos aspectos que mejorarán su desarrollo. Una de estas cosas y posiblemente la más importante es la exposición a personas de ideas afines con las que puede intercambiar ideas y conceptos. También es muy agradable poder escuchar las experiencias de los instructores que tienen conocimientos valiosos para impartir y, en ocasiones, pueden enderezar conceptos incomprendidos en una o dos oraciones. Es bueno poder aclarar conceptos en el momento de la exposición inicial en lugar de tener las ideas equivocadas y tener que resolverlas más tarde.
fuente