
“A veces sucede que el círculo de horizonte de un hombre se vuelve cada vez más pequeño, y cuando el radio se acerca a cero, se concentra en un punto. Y entonces ese se convierte en su punto de vista ".
David hilbert
"Cuando pensé que había tocado fondo, alguien golpeó desde abajo".
Stanisław Jerzy Lec
Prefacio
¿Un programador necesita una educación superior? El flujo de opiniones sobre este tema indudablemente urgente no se ha secado, por lo que he decidido expresar mi opinión. Me parece que la decepción general en la educación se debe a los numerosos procesos y cambios en la profesión y necesita un estudio serio. A continuación, analizaré los conceptos erróneos, los mitos y las causas subyacentes más comunes del fenómeno.
Quizás llegaste al lugar equivocado
Una vez más les recuerdo: la universidad no es una escuela vocacional. Las universidades producen científicos e ingenieros, no obreros y técnicos.
La universidad te brinda conocimientos fundamentales, que no se volverán obsoletos cuando termines tu educación. Un biólogo de los Institutos Nacionales de Salud me escribió:
"Los tiempos cambian pero los fundamentos no cambian" . Excelentes palabras! Es por eso que es mejor elegir la dirección general de educación y tratar de tomar el máximo número de cursos electivos, y es por eso que en las universidades los estudiantes de física de pregrado reciben (como mucha gente adivina) tantos cursos
"innecesarios" como biología, química o literatura, en lugar de las especiales.
Carl Sagan, famoso astrónomo, mencionó en sus libros que estaba trabajando en el laboratorio de genética e hizo experimentos para probar la hipótesis de la abiogénesis mientras estudiaba. Es genial que en los EE. UU. Sea posible (además de la especialidad principal) agregar algunas otras especialidades (menores). Esta es una oportunidad maravillosa que muchos otros países como Rusia no ofrecen. Por lo tanto, si puede elegir entre la teoría de la evolución y la programación Java, elija la primera, tal vez, algún día, este conocimiento será útil en su carrera o incluso en su vida. Todavía aprenderá Java, si realmente lo necesita, pero es poco probable que aprenda la historia de nuestro planeta. Además, la evolución es una idea tan general y universal que puede aplicarse a casi cualquier disciplina de ingeniería. Recuerde, reducir sus horizontes siempre es más fácil que expandirlos.
Hasta el punto, la situación en las universidades extranjeras no es fundamentalmente diferente. Como resultado de muchos años de evolución paralela, el mundo ha desarrollado requisitos similares para los profesionales. Tienes toda la razón en que en otros países se te enseñará de una manera diferente, pero está equivocado si crees que se te enseñarán cosas diferentes. Las universidades de otros países difieren en los procesos educativos, los nombres y la cantidad de cursos, la calidad de las prácticas y la ciencia real, pero la base teórica es similar en todas partes. La razón de tal unificación es bastante clara: las leyes de la naturaleza son invariables en todos los países. Por lo tanto, los especialistas de un país pueden trabajar en todo el mundo.
¿Quiénes son los programadores?
Para ilustrar la importancia de la pregunta, pasaré a una analogía. Imagine que le pregunta a alguien cuál es su profesión, y él dice que es un constructor. ¿Puedes adivinar lo que hace sin ninguna información adicional? No Podría ser un arquitecto con educación artística, ingeniero, capataz, trabajador calificado o un limpiador. Agujas para decir, muchas de estas áreas tienen sus propias especializaciones. Y aun así, todos se llamarían constructores, pero es obvio que son tipos muy diferentes de constructores. Para hacer una caseta de perro, uno no necesita tener una educación especial, pero sin ella nadie puede construir un rascacielos.
Sin embargo, aquellos que construyen casetas para perros generalmente no se llaman constructores. Por otro lado, casi todos ahora se llaman programadores. Un informático que inventa nuevos algoritmos; desarrollador de software de navegación en la NASA; un experto en lenguaje ensamblador que estudia virus; un escolar que crea páginas HTML; todos ellos son programadores ahora. Entonces, antes de responder la pregunta: “¿Necesita un programador educación superior?”, Debe aclarar: ¿qué tipo de programador? Quizás, en su caso particular, la educación obviamente no es necesaria.
Nos guste o no, los sueños de los
hermanos Strugatsky de un mundo de jóvenes asistentes de investigación se derrumbaron. La gran mayoría de las personas no se convertirán en científicos o ingenieros, y definitivamente no necesitan un título universitario. Los dos años de grado asociado abordan por completo sus necesidades. Porque, por regla general, sus deseos y necesidades no cumplen con los objetivos de la educación universitaria y su trabajo propuesto tiene poco que ver con la ciencia o la ingeniería. Esto no es terrible, ya que el número de ingenieros en cualquier campo en un momento dado siempre ha sido menor que el de los técnicos y los trabajadores manuales. No hay nada humillante en la profesión de cuello azul, especialmente si te gusta, pero no tiene sentido que una de esas personas se haga llamar ingeniero. En cambio, debes admitir honestamente quién quieres ser y no exigir que las universidades sean lo que se supone que no deben ser. Solo una cosa, no te llames programador, porque un programador es un ingeniero.
Los ingenieros no pueden ser collares azules. Incluso para desarrollar un programa simple, debe ser un buen ingeniero, o su programa será grande y lento, consumirá recursos informáticos y producirá tráfico innecesario, inundando la red. Por otro lado, los collares azules realizan trabajos no creativos, generalmente no toman decisiones y no resuelven problemas; Si siguen las instrucciones, hacen su trabajo muy bien.
Sin embargo, ya ha habido trabajadores manuales en la programación hace muchos años. Eran máquinas de escribir, que codificaban programas escritos por ingenieros en un papel. Y desaparecieron muy rápidamente cuando las computadoras obtuvieron terminales más convenientes.
Mide tres veces y corta una vez
Cada profesión tiene un conjunto mínimo de conocimientos obligatorios. En informática y programación, tal base son los cursos de matemáticas; entonces la pregunta "¿Necesita un programador la educación?" generalmente se convierte en "¿El programador necesita matemáticas?" o "¿Necesita el programador tantas matemáticas?" Dado que un programador en el sentido clásico es un ingeniero, la pregunta puede formularse de manera diferente: "¿Necesita un ingeniero la educación?" La discusión sobre esta forma de pregunta generalmente no surge. El problema, tal vez, es que no todos quieren ser científicos o ingenieros. Si el límite de tus sueños es publicar un juego simple en la App Store y no diseñar la inteligencia artificial, el algoritmo criptográfico o el software de ingeniería CAD, puedes pasar fácilmente por alto la universidad para comenzar tu carrera, pero incluso en este caso es bueno La educación te ayudará.
Las universidades no saben a quién te ves en el futuro, e incluso a menudo no lo sabes a la edad de tu inscripción. Se cree que es mejor enseñarle todo lo básico que perder algo importante. Además, los cursos básicos son generalmente interdependientes, y no puede simplemente recoger y eliminar algunos de ellos. Su objetivo principal no es enseñarle todo el conocimiento del mundo, ya que eso es imposible en principio, sino proporcionarle un mapa aproximado de la ciencia y la ingeniería modernas, de modo que cuando ocasionalmente se enfrenta con algo desconocido, puede hacer que (probablemente) la decisión correcta, en qué dirección ir.
Volvamos a las matemáticas. Casi todos los libros sobre algoritmos requieren cierta cultura matemática del lector. Los algoritmos y las estructuras de datos, como dijo
Niklaus Wirth , son los programas de computadora, y si no puede trabajar con ellos, no se le puede llamar programador. Esta no es necesariamente la capacidad de diseñar sus propios algoritmos, generalmente necesita cambiar los existentes, adaptándolos a casos individuales, sino también la capacidad de probar su validez y aplicabilidad a una variedad de condiciones, y la capacidad de analizar su comportamiento en ciertas situaciones Las matemáticas se utilizan activamente en áreas como la criptografía, los gráficos por computadora, el reconocimiento de patrones, el procesamiento de video, sonido, imagen y señal, la física de la computación, la química y la biología, etc. Incluso en la programación del sistema (que generalmente se encuentra lejos de las matemáticas) sin antecedentes matemáticos serios, no puede escribir compiladores, programadores y controladores de sistemas de archivos.
Las matemáticas son la base de todos los demás conocimientos. Pero muchas personas comienzan a aprender la profesión desde el final. Los programadores que han estudiado lenguajes de programación, herramientas de desarrollo, diversas tecnologías y patrones, pero que no han dominado los fundamentos matemáticos, parecen artistas, que tienen una comprensión perfecta de las pinturas y pinceles, aprendieron muchos trucos, pero no conocen el color. teoría, composición, perspectiva, anatomía humana y otros conceptos básicos. Pueden tener muchas ideas brillantes, pero no podrán expresarlas. Y todo lo que pueden hacer es trabajar como asistentes o volver a pintar las fotos de otros.
Ocasionalmente, la ignorancia de lo básico crea nuevos estilos, como en el caso de Vincent Van Gogh (para su crédito, debo decir que estaba al tanto de sus problemas y tomó lecciones de pintura de profesionales), pero generalmente se convierte en un obstáculo para la creatividad. Y si en el arte es posible justificar las imágenes irónicas del artista diciendo que
"él ve de esta manera" , en la industria aeroespacial tales casos (como cuando el algoritmo de generación de números aleatorios incorrecto llevó a los millones de dólares de contribuyentes honestos a fallar el objetivo ), no puede justificarse por nada.
Al mismo tiempo, no debemos olvidar que, en su mayor parte, las matemáticas para programadores son una caja de herramientas en lugar de una ciencia, y los profesores deben enseñarles en consecuencia, especialmente los cursos de primer año, explicando a los estudiantes la razón para estudiarlos.
En cuanto a las ciencias sociales y otros cursos no básicos, su importancia está marcada no solo por el hecho de que cualquier persona debe ser bien culta y educada, sino también porque la mente humana es extremadamente impredecible y a veces se inspira en fuentes inusuales. Mi profesor de ruso me contó una historia de la época soviética, cuando un instituto de aviación decidió ahorrar dinero y se deshizo de los cursos de literatura. ¿Y qué crees que ocurrió después? Pronto el nivel de ingenieros graduados había disminuido. Posteriormente, los cursos de literatura fueron devueltos al instituto. Entonces todos estos cursos son necesarios. Desafortunadamente, a menudo se les enseña mal, eso no aumenta su popularidad; pero estamos hablando de la idea, ¿verdad?
Entonces, si no usa el conocimiento adquirido en la universidad, entonces el problema probablemente no esté en su universidad sino en su trabajo, lo que no le da la oportunidad de usarlo. Es una tontería culpar a la universidad por dar cursos
"incorrectos" , cuando estudiaste cómo diseñar algoritmos de encriptación, pero ahora haces páginas web simples o incluso trabajas como gerente de ventas.
¿Por qué universidades?
Bien, usted dijo, pero ¿por qué la educación regular es mejor que la autoeducación? Después de todo, la programación no es ingeniería genética: no necesita trabajar en laboratorios especiales caros y puede aprender todas las teorías sentado en casa. De hecho, los programas educativos de las universidades son conocidos, muchos cursos están abiertos, puedes comprar cualquier libro, sacarlo de la biblioteca pública o leerlo en la Web. Sin embargo, no todo es tan simple como parece. Las matemáticas, en contraste con las tecnologías y los lenguajes de programación, suelen ser muy difíciles de aprender. Es posible que no sepa que está haciendo algo mal, a menos que se lo indiquen. Los contactos personales son muy importantes y pueden ahorrarle mucho tiempo y nervios. Por ejemplo, puede escuchar la conferencia durante unas horas y comprender muy poco, mientras que durante el descanso en unos minutos encontrará todas las respuestas del profesor. Algunos programadores aún necesitan laboratorios y condiciones especiales, por ejemplo, aquellos que desean trabajar con microprocesadores de arquitectura única, supercomputadoras, robots industriales o satélites.
Estudiar en una universidad también es una oportunidad para adquirir experiencia práctica en empresas y organizaciones, que de otra forma no hubieran sido posibles. Esta es una oportunidad para hacer ciencia, escribir artículos y participar en conferencias, que es una condición necesaria para trabajar en los laboratorios de investigación de muchas compañías, como Samsung, Phillips o IBM. Casi todas las tecnologías que cambiaron el mundo se desarrollaron en las universidades, y algunas, como la famosa
LLVM , han surgido de proyectos estudiantiles. Las compañías conocidas fueron fundadas por científicos y graduados dentro de los muros de las universidades: Silicon Graphics, Sun Microsystems, Yahoo, Adobe y muchos otros.
Por último, pero no menos importante, sin educación formal, las puertas de muchas organizaciones de investigación (como NASA, NIH, CERN o ARPA-E) estarán cerradas para usted. Tienes que demostrar tu profesionalismo y ser mucho mejor que los competidores, porque cuando todas las demás calificaciones son iguales, la educación formal será una ventaja para ellos. Además, sin un título, es muy difícil obtener un permiso de trabajo en otros países. (No es muy importante para los EE. UU., Pero sigue siendo útil).
Cuando alguien toca desde abajo
El problema es global, pero el más agudo en programación. Y es por eso. La reducción de la barrera de nivel de entrada ha jugado una broma cruel en la profesión. Inicialmente, todas las herramientas de desarrollo fueron escritas por programadores experimentados para simplificar su trabajo. Estas tecnologías fueron útiles solo si comprende qué procesos ocurren en ellas. Por lo tanto, le permitieron escribir más programas en menos tiempo, pero su calidad dependía exclusivamente de sus conocimientos y habilidades, porque las herramientas de desarrollo aún no saben cómo pensar y tomar decisiones por usted. Entonces alguien decidió que la simplificación de la programación atraería a más personas a la profesión. Muchas personas soñaban con un momento en el que todos podrían escribir programas, independientemente de sus habilidades.
Miedo a tus deseos. Desafortunadamente, sus sueños ahora son en gran medida una realidad, y no como se pretendía en los años setenta. Ahora puede crear programas a partir de bloques de construcción, incluso sin comprender cómo funcionan. Si no eres un profesional, será un mal pero (desafortunadamente) programa de trabajo. La difusión de la tecnología barata y la facilidad de desarrollo han llevado al hecho de que el mercado ahora está inundado de programadores poco calificados. Como
dice la Ley de Say, "la oferta crea su propia demanda". Muchas compañías contratan a estos "programadores" no porque realmente los necesiten, sino simplemente para no ser peores que sus competidores. La regla es simple: si no puede contratar programadores profesionales, no los necesita en absoluto. Simplemente compre el producto existente o pídalo a una compañía de software profesional.
Pero no es suficiente escribir un programa, aún necesita publicarlo. Y nuevamente, el surgimiento de muchas tiendas en línea brindó una oportunidad para todos. Google, Apple, Microsoft y otras compañías de software están interesadas principalmente en el mayor número posible de programas para sus plataformas, y también están lanzando herramientas de desarrollo para ellos. En tales circunstancias, el proceso de desarrollo se simplifica aún más, lo que finalmente condujo a una disminución aún mayor en la barrera de entrada de la programación.
El resultado de todo esto es la ilusión de la facilidad de programación, la gente comenzó a pensar en ello como algo no serio, que no requiere conocimientos y educación especiales. Dicha opinión se formó no solo a partir de los principiantes, sino también (lo que es mucho peor) por clientes y empleadores sin experiencia. Muchos de ustedes han visto las vacantes con una impresionante lista de habilidades necesarias, idiomas, bibliotecas y tecnologías, muchas responsabilidades (con la posible excepción de los servicios de limpieza), pero todas ofrecidas con un salario modesto (si no es que ridículo).
Es difícil de imaginar en industrias como la ingeniería aeroespacial, donde el precio de los errores es la vida humana. En tales profesiones, la selección es muy difícil. Nadie quiere perder millones de dólares en pagos de seguros, retiro de licencias y mala reputación. Por lo tanto, un ingeniero aeroespacial puede ser bueno o inexistente, porque nadie desea contratar al malo incluso si le pide un salario muy pequeño. Muy diferente de la programación, en la que no hay límite inferior, y cada programador, incluso muy poco calificado, no se quedará sin un trabajo. Nuestra civilización sigue viva solo porque la mayoría del trabajo realizado por los programadores no es crítico, podemos vivir fácilmente sin ella y cualquier problema no conduce a un desastre. Imagina que todos los juegos de computadora de repente dejaron de funcionar en el mundo, ¿sería un desastre? Por supuesto que no! Sin duda, este será un problema global, pero ciertamente no un desastre. Sin embargo, si el mismo destino sucediera a las aeronaves, el resultado sería trágico.
Sin embargo, el peligro se acerca. La programación ahora está en casi todas partes, y se propaga muy rápidamente. Los errores de los programadores en el software ya cuestan demasiado, y el precio de estos errores aumentará hasta que llegue a la vida humana. Puede recordar fallas de la
sonda espacial Mariner I (28 de julio de 1962),
Ariane 5 Flight 501 (4 de junio de 1996),
Mars Climate Orbiter (10 de noviembre de 1999),
Misil Patriot (25 de febrero de 1991) y finalmente
Therac-25 que expuso a seis personas a sobredosis masivas de radiación, matando a cuatro y dejando a otras dos con lesiones de por vida (1985-1987). Por lo tanto, el día en que su tetera programable pueda matarlo porque su firmware está escrito por programadores poco calificados de una compañía de outsourcing sin nombre (ubicada en algún lugar de Laos) no está lejos de hoy. Estás advertido
La vida real
Por supuesto, esto no significa que una educación excelente o un conocimiento perfecto de las matemáticas te convierta en un programador de clase mundial (puede ser necesario pero no suficiente). Todos saben que muchos de los graduados universitarios no están trabajando en su campo. Y personalmente conozco a muchos matemáticos que escriben programas horribles. Por cierto, es posible que no tengas habilidades para programar, una situación muy común. Por lo tanto, generalmente estoy en contra del uso de criterios simplificados. En la vida real, todo es importante: educación formal, conocimiento, investigación, práctica y, por último, pero no menos importante: su deseo.
La gente a menudo piensa que la universidad es un elevador, lo que los ayudará a alcanzar la cima de su carrera, mientras que en realidad es más como una escalera, y para lograr sus objetivos, necesita moverse. La educación no te garantiza un buen trabajo si no haces un esfuerzo, pero puede ayudarte a conseguir uno si te esfuerzas. Y si durante sus estudios no participó en ninguna investigación o proyecto comercial y comenzó a buscar trabajo solo después de su graduación, entonces la programación (como cualquier otra ingeniería) no es la profesión para usted.
¿Cómo lo hicieron?
Bill Gates, Mark Zuckerberg, Larry Ellison. Al leer historias de éxito de personas famosas, muchas mentes inmaduras piensan así: "Si pudieran hacerlo, entonces yo puedo hacerlo". Tal vez Pero tenga en cuenta que el éxito es un concepto muy versátil, una cosa es ser un vendedor exitoso y otra muy distinta ser un ingeniero sobresaliente. Sin embargo, no es ningún secreto que algunos programadores de fama mundial no tienen educación formal, pero antes de que pruebes sus vidas por ti mismo, recuerda que son raras excepciones entre muchos perdedores desconocidos. Si alguien saltó por una ventana y sobrevivió, no significa que no deba usar las escaleras. Del mismo modo, la educación no debe confundirse (un error muy común) con el diploma, el hecho de que alguien no haya completado la educación no significa que no haya obtenido ningún beneficio. Es probable que hayan estudiado durante varios años, asistido a cursos y adquirido algunos conocimientos. Algunos de ellos (como Steve Wozniak) todavía regresaron y completaron su educación muchos años después.
Igualmente importantes son sus habilidades mentales y su carácter: como regla, todos son brillantes, inteligentes, talentosos y algo brillantes, personas que sabían desde el principio lo que necesitaban, tienen un propósito y una eficiencia de trabajo fenomenal. No piden las opiniones de otras personas y no imponen las suyas. Y, sin embargo, algunos de ellos, por ejemplo,
John Carmack (el autor de los juegos DOOM y Quake) lamentan no haber recibido una educación formal y ser demasiado seguro de sí mismo.
Si usted es el mismo que ellos, sinceramente le deseo éxito, de lo contrario, ¿no es mejor utilizar una forma más clara y comprobada?
El futuro de los trabajos manuales
La cuestión es que las profesiones de cuello azul se extinguen lentamente porque son reemplazadas por robots y máquinas automáticas. Ahora fábricas enteras están regidas por unos pocos ingenieros y técnicos calificados. Esto es bueno porque ningún trabajo industrial debe hacerse a mano más de una vez. Y eso es especialmente cierto en la programación, porque en la programación el trabajo no creativo puede automatizarse muy fácilmente. El mundo actual no necesita más collares azules, porque las máquinas hacen su trabajo muy bien, necesita más científicos e ingenieros que inventen nuestro futuro. Del mismo modo, el mundo no necesita más programadores poco calificados (aunque no sean collares azules en ningún sentido) porque serán reemplazados muy rápidamente por máquinas y programas inteligentes. En cambio, el mundo necesita más programadores altamente calificados, verdaderos ingenieros, que cambiarán nuestra vida, haciéndola mejor, más segura y más larga.
Mire las posiciones abiertas en los departamentos de investigación de muchas compañías. Como se mencionó anteriormente, hay demasiados programadores y la competencia es muy alta, sin embargo, mientras tanto, ¡estas compañías e instituciones no pueden encontrar suficientes buenos investigadores e ingenieros de programación! Muchos puestos están abiertos por años. Entonces, ¿dónde está la competencia y el desbordamiento? Están en gran medida en los niveles bajos. La triste verdad es que a medida que la programación se vuelve más fácil para los no profesionales, los niveles bajos se desbordarán más. El salario disminuirá hasta que a los programadores poco calificados se les pague no más que a los trabajadores de McDonalds.
La buena educación superior es muy costosa y lleva muchos años, pero es la base de su futuro, que se extenderá al futuro de su familia. Por lo tanto, es hora de elegir si
"codificará para alimentos" toda su vida o si trabajará en una buena compañía por un salario más alto. Además, la recompensa no es solo su salario, sino también un trabajo interesante que cambia el mundo.