¿Se puede obtener una base sólida de programación sin ir a la universidad? [cerrado]

28

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:

  1. Ir a la universidad te da el papel, que es esencial para conseguir empleos, especialmente en tiempos económicos difíciles.

  2. 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?

Daniel
fuente
2
Es probable que al menos una persona en este planeta pueda. Por cierto, la razón 1 todavía importa. Cuando todo lo demás es igual, "ellos" aún preferirían a alguien con una educación más formal.
Trabajo
1
Puedo decirte una cosa, no sabrás qué significa sólido en una universidad.
Peter Turner
El punto es que lleva diez años aprender programación, y pasar algunos de estos años aprendiendo en alguna universidad puede ayudar.
Basile Starynkevitch

Respuestas:

17

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:

  • ¡Aprender haciendo! ¿Quieres saber cómo funcionan los árboles binarios? Haz uno.
  • Hazlo aprendiendo. Establezca proyectos ambiciosos en los que tendrá que aprender cosas nuevas para completarlas. Precaución: si establece proyectos que son demasiado difíciles, entonces es fácil desanimarse, pero si establece proyectos que son demasiado fáciles, entonces no aprenderá mucho. Estás buscando una zona de mantequilla.
  • Comience con C. Los lenguajes de alto nivel lo hacen flojo. Nunca habría aprendido C si hubiera aprendido Python primero.
  • Wikipedia debería ser su primer punto de referencia para cualquier concepto que necesite aprender.
  • No importa si nunca termina un solo proyecto (después de todo, lo que está terminado). Es mucho más importante que aprendas cosas nuevas. Eso no quiere decir que nunca debas intentar terminar un proyecto. Puede ser un gran estímulo motivador ver algo que hiciste funcionar. Es fácil desviarse, no se preocupe si lo hace.

¿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.

dan_waterworth
fuente
Igual que aquí. Obtuve un título para el periódico. No aprendí demasiado, sobre todo todo lo que ya sabía. Aprendí que realmente odiaba Java más de lo que pensé inicialmente (tuve que usarlo para mi proyecto final) y tuve un gran profesor que nos enseñó desde su experiencia personal donde aprendí muchas cosas.
Echo dice Reinstate Monica
@ Eco, ¿valió la pena?
dan_waterworth
@Dan_waterworth, me gusta pensar que sí.
Echo dice Reinstate Monica
Creo que tiene mucho más sentido comenzar con un lenguaje de programación de alto nivel, especialmente con Python. Por supuesto, depende del tipo de tareas que le gustaría abordar una vez que haya terminado de aprender los conceptos básicos: si desea hacer una programación de sistemas hardcore, vaya por la ruta C, si desea desarrollar aplicaciones de usuario final, no haga No te molestes con C y ve por algo como Python.
Zsolt Török
No estoy de acuerdo con la parte C. desea permanecer en un alto nivel de abstracción. puedes argumentar que C te hace flojo, ¡aprende el código de máquina! Si no necesita el tipo de rendimiento C, está bien quedarse con Python.
segfault
12

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.

Sorantis
fuente
1
Bueno, ya tengo un título en Economía Internacional, así que esa parte está cubierta.
Daniel
1
Tengo un amigo que tiene un título en algún <noname>, y es un exitoso programador Flash / PHP. Supongo que todo depende de ti. Por ejemplo, tengo un título en física, pero soy desarrollador de software. Hace dos años decidí obtener un Master en CS, solo porque lo quería, no porque lo necesitaba.
Sorantis
55
Mi educación universitaria me enseñó a aprender un nuevo lenguaje de computadora en 1-2 días a partir de tutoriales en línea. Si ya puedes hacerlo, habrás aprendido una gran lección.
apoorv020
1
Sí, pero debes ser un autodidacta comprometido.
dietbuddha
3
Algunas personas no necesitan aprender a aprender de forma independiente.
dan_waterworth
6

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.

SOLO MI OPINIÓN correcta
fuente
4

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.

Marcie
fuente
3

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.

rjzii
fuente
2

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.

Heath Lilley
fuente
2

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.

Berin Loritsch
fuente
De acuerdo. Casi toda la programación empresarial que he realizado ha sido similar a trabajar en un oficio como un carpintero. Creo que una pista de programación de aprendiz / oficial / maestro sería más útil que una universidad para aprender a programar.
cfeduke
2

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.

rev konrad
fuente
Su estimación de aproximadamente el 90% de la programación que no tiene un contenido teórico fuerte es probablemente correcta. Desafortunadamente, la mayoría de los programadores se encontrarán periódicamente con el otro 10%, por lo que es necesario.
Orbling
2

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.

k rey
fuente
2

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.

TMN
fuente
Yo si. De hecho, la mayor parte de mi estudio fue en significativamente menos de 2 años (aproximadamente 6 meses), pero regularmente hago 60-70 horas semanales.
dan_waterworth
De acuerdo con TMN. En GENERAL, su educación formal no tiene idea de dónde terminará, tiene una cierta cantidad de BREADTH (es decir, tiende a cubrir una gran cantidad de territorio). Mi ejemplo en una publicación anterior: nunca pensé que usaría Compiler Construction que era parte de mi curso. Resulta que, más de 20 años después, fue uno de los cursos más importantes que hice. Ahora el problema es que, para aquellos que no tienen ese conocimiento en la parte posterior de la cabeza, no saben lo que no saben. Y ese nivel de ignorancia te hace menos efectivo a largo plazo.
rápidamente_ahora
1

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.

ian
fuente
Esto es principalmente un problema donde la contratación se realiza a través de un departamento de Recursos Humanos (RR. HH.). La mejor manera de lidiar con esto es construir una red social empresarial de gerentes de TI que lo conozcan a usted o al menos a usted, y dejar de intentar eludir el proceso de "filtro" de Recursos Humanos. En otras palabras, las personas sin títulos tienden a tener que ser mejores para comercializar sus habilidades y servicios, en lugar de solicitar puestos anunciados. La mayoría de los gerentes de TI competentes contratarán con base en un historial sólido y reputación (es decir, referencias de alguien en quien confían). No esperes conseguir un trabajo en el gobierno. Es raro hoy en día
mctylr el
1

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.

JeffO
fuente
1

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).

GWLlosa
fuente
1

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.

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.

Paul Nathan
fuente
0

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.

Dave B.
fuente