¿Por qué las clases de programación que se imparten en las escuelas se centran tanto en los algoritmos y la lógica, cuando la mayoría de los trabajos parecen ser corporativos que se centran principalmente en las bases de datos, el procesamiento de datos, los servicios web y demás?

Respuesta corta:
Porque las bases de datos, el procesamiento de datos y los servicios web no son lo único que hacen los chicos de CS. Nunca se sabe qué tipo de proyectos se le ofrecerán en la industria.

Respuesta larga:
Ha mencionado sobre bases de datos, procesamiento de datos y servicios web para reforzar su argumento. Pero, ¿has pensado en cuáles son las tecnologías básicas que ayudaron a crearlas? No solo esto, el paradigma existente de bases de datos y servicios web también está evolucionando continuamente. Ahora tenemos NOSQL, BIG SQL y varios sabores diferentes para diferentes propósitos. ¿Quién los diseñó? Obviamente personas con conocimientos básicos de informática.

Los chicos de CS no solo trabajan en el nivel de aplicación. Trabajan en sistemas integrados, telecomunicaciones, redes, industrias aeroespaciales, sectores financieros, visión artificial, robótica, arquitectura de sistemas, etc. Nuestras universidades no capacitan a los estudiantes teniendo en cuenta que este tipo solo trabajará en este dominio en particular, no al menos a nivel de pregrado. Por lo tanto, se requiere que tenga un conocimiento y comprensión sólidos de los algoritmos, la lógica, las estructuras de datos, las redes, las bases de datos, los autómatas y los principios básicos de la ingeniería de la comunicación y la teoría de la codificación. Solo entiendo que el principio principal de todos los cursos de ingeniería y CS es la optimización y es por eso que las universidades (e incluso las compañías de Silicon Valley) dan énfasis a los algoritmos y la lógica. ¿Qué piensas, por qué nuestros sistemas de comunicación están evolucionando para mejorar cada vez más? Por qué hay un mejor procesador cada seis meses y un año en el mercado. ¿Quién está trabajando detrás de ellos? Obviamente, son aquellas personas que tienen conocimiento y comprensión de los algoritmos y la lógica y son las personas que trabajan detrás de la escena para abordar esos problemas.

Las corporaciones a las que se refiere parecen estar más orientadas al desarrollo de aplicaciones, donde usan sistemas (servidor de aplicaciones, db, servidor web, etc.) para construir sus aplicaciones para resolver ciertos problemas comerciales. A lo largo del tiempo, obtuvimos soluciones preempaquetadas para casi todo, desde una base de datos hasta un servidor de aplicaciones y componentes de UI. La programación algorítmica más compleja, a la que se refiere, ocurre incluso hoy en gran medida en el desarrollo de estos sistemas.

Más explicación:
Permítame elegir dos campos de trabajo distintos en el área de TI para resaltar hasta qué punto se demuestran estas habilidades: ingeniería de aplicaciones e ingeniería de sistemas. Si bien los algoritmos y la lógica son importantes y vitales en ambos campos, el grado en que se aplican y necesitan varía bastante.

El grupo de ingeniería de aplicaciones desarrolla aplicaciones para resolver un problema / brecha empresarial. El grupo de ingeniería de sistemas desarrolla todos los sistemas, herramientas y marcos necesarios para respaldar el desarrollo de la aplicación. Más como los pilares. Todo, incluido el sistema operativo de su computadora portátil al navegador que utiliza, es, en última instancia, un software. Por lo general, este no es el tipo de software que desarrolla un ingeniero de aplicaciones.

Un ingeniero de aplicaciones desarrolla una aplicación como Quora para llenar el vacío de “reunir a personas como nosotros para hacer y responder preguntas”. Pero, detrás de las escenas de incluso esta aplicación, usted ve que está codificado en ciertos lenguajes de programación, alojados en un servidor de aplicaciones para manejar la lógica de negocios (Apache Tomcat, Weblogic, JBoss, Websphere, etc.), el servidor web para manejar las solicitudes http ( Apache HTTP Server, Oracle HTTP Server, Express, etc.), escriba datos en la base de datos (Oracle, MySql, SQL Server, Postgre SQL y muchas otras bases de datos noSQL), alojados en una máquina virtual en la nube.

Toda la infraestructura requerida es nuevamente un programa escrito típicamente por el grupo de ingeniería de sistemas. Una gran cantidad de programación orientada algorítmica, que usted mencionó, sucede aquí. Estos marcos son utilizados por millones de aplicaciones y si las estructuras de datos o la lógica no están bien optimizadas, puede afectar el rendimiento de todas estas aplicaciones.

No es para socavar la necesidad de tal trabajo como ingeniero de aplicaciones, pero esta respuesta es más en términos relativos.

Razones históricas. El campo de la informática se levantó de la academia. La contribución de matemáticos y especialistas en teoría tuvo una gran influencia en el desarrollo del campo. Las universidades valoran y respetan estas fundaciones y siguen siendo un lugar donde la investigación en esta área puede continuar. La tradición perpetúa, a menudo hasta el punto de descartar gran parte de los detalles exigentes que requieren la mayoría de los trabajos de programación.

Una creencia en la adaptabilidad de especialistas educados. Al contrario de los reclutadores que parecen buscar experiencia con tecnologías específicas, los científicos de la computación asumen que un buen conocimiento de los conceptos de programación junto con la capacidad para resolver problemas complejos es valioso en cualquier entorno tecnológico. Gran parte de Java, PHP, Python y C ++ utilizan el mismo conjunto de habilidades. Aprender un nuevo dialecto se considera un esfuerzo trivial para un desarrollador educado, a pesar de todo el tiempo y el esfuerzo que se requiere para llegar a dominarlo.

Supuestos de dedicación apasionada. Para que estos asuntos triviales se cuiden a sí mismos, se puede suponer que los estudiantes deben jugar con varias tecnologías en proyectos personales. Los programadores no van a la universidad para obtener un trabajo, sino para elevar el nivel, desarrollar capacidades más altas y abordar problemas que trascienden la mera plomería de los componentes técnicos.

Existen escuelas técnicas que no son universidades que se centran en las demandas del mercado. Pueden ser un primer paso en un trabajo de programación, a pesar de sus modestos objetivos. A menos que alguien ya sea un programador aficionado decente, apuntar directamente a una educación universitaria en el campo y centrarse en su programa puede ser un movimiento audaz, ofreciendo solo pocas opciones después de la graduación.

1. Los sistemas de información, en contraste con la informática, es la disciplina que trata con los datos que usted menciona. Mi título en Sistemas de información no me enseñó nada sobre las coordenadas polares o sobre cómo programar un juego multijugador masivo en línea, pero puedo manejar una gran cantidad de datos y normalizar los registros con los mejores.

2. Los primeros trabajos fuera de la universidad son puestos de nivel de entrada, especialistas que le permiten enfocarse y ser verdaderamente competentes en un conjunto de habilidades técnicas. Si permanece en el campo y busca promociones en la administración, deberá poder ver una vista más amplia.

3. Debe poder pensar en algoritmos, árboles de decisión y diagramas de flujo para administrar cualquier operación importante, especialmente si está en TI.

4. El idioma o la aplicación que mejor conozca cuando se gradúe no será el mejor disponible 5-10 años después y necesitará la habilidad de aprender nuevos idiomas / programas o tal vez incluso diseñar otros nuevos.

En resumen, las universidades enseñan pensamiento avanzado. Es lo que separa las carreras de los empleos sin futuro.

ANS : Porque las habilidades para desarrollar y analizar algoritmos, y para entender y aplicar la lógica son las habilidades básicas requeridas para innovar y adaptarse a nuevos contextos y problemas.
Si desea el mismo ‘menú’ para las próximas décadas (más), enseñe las ‘recetas’. Si desea que los futuros graduados produzcan nuevas soluciones a nuevas ideas / problemas, posean un análisis sólido y se conviertan en pensadores críticos adaptables, proporcionen los ‘ingredientes básicos’ de la lógica analítica y el examen crítico de algoritmos / estructura algorítmica Y (lo más importante) enseñe a los estudiantes Cuestionar, analizar, pensar y razonar .
La adquisición de conocimiento y ‘know-how’ es fantástica, pero sin la capacidad de transferir ese conocimiento a escenarios reales, solo son credenciales nominales.
Reflexiona: ¿Cuántos nuevos esquemas, descubrimientos, invenciones surgieron de alguien que repite el trabajo de otros? ¿Cuántos surgieron de alguien que piensa en lo básico de una manera diferente?

La mejor analogía que he encontrado hasta ahora es cómo se entrena un médico.

La mayoría de los días, las personas vienen con resfriados, dolores de espalda o acné. Pero de vez en cuando consigues a alguien con algo más oscuro, posiblemente mortal, al que debes recurrir durante años de entrenamiento para darte cuenta. Sin ese entrenamiento, no serías un doctor efectivo. Solo podrías prescribir Benadryl y Tylenol y no podrías ayudar a nadie con una queja no trivial.

Porque no son clases de programación. Son clases de informática. La programación es un oficio aprendido. La informática es una disciplina académica digna de investigación. La programación se ocupa de implementar la lógica en un lenguaje dado. La informática, entre otras cosas, trata con algoritmos, lógica y pruebas. Estoy bastante seguro de que la clase que mencionas fue una clase de informática, no una clase de programación.

¿Conoces el modelo clásico de análisis de cascada?

Comience con los requisitos, la información directamente del usuario. Luego conviértalo a una especificación que se puede usar en la programación pero que está impulsada por los requisitos. A continuación, use los requisitos y especificaciones para producir realmente algún software.

La mayoría de los trabajos de TI están en algún lugar de ese proceso. Pero la clase de “algoritmos 101” tiene que ver principalmente con la tercera parte

Las empresas realmente no contratan “programadores” a menos que tengan un producto de TI de núcleo duro. Contratan personas con conocimientos sobre los procesos de negocios que pueden aplicarse a TI.

Por cierto, se ha dicho desde la década de 1950 que “lo próximo” eliminará la necesidad de una capa de personas para mediar en los sistemas de TI. Pero aún no ha sucedido.

En primer lugar, creo que debes estar hablando de buenas escuelas, ya que se centran en los conceptos básicos de la programación como algoritmos y lógica. Porque hay un montón de escuelas y colegios (al menos en la India) donde solo te enseñan lenguajes de programación particulares o Base de datos sin los fundamentos. A los estudiantes de estas universidades les resulta difícil despejar entrevistas y otros exámenes de buenas compañías porque se centran en lo básico y la aptitud para resolver problemas (más aún a un nivel más fresco).

Otros han explicado por qué es bueno cubrir algoritmos y lógica, y estoy de acuerdo en que estos son los cimientos. Una vez que obtenga esto, la tecnología puede cambiar, pero siempre puede aprender a implementar su lógica en cualquier idioma / base de datos una vez que tenga una comprensión clara de los fundamentos.

Sé agradecido a tu escuela.

Tienden a centrarse en los aspectos fundamentales: las cosas que no cambian, las cosas que puede aplicar en una amplia gama de problemas. De esta manera también te enseñan el pensamiento algorítmico. Entonces, cuando encuentre un nuevo problema, (con suerte) podrá entenderlo y elaborar una solución usted mismo, en lugar de buscar desesperadamente una solución lista para usar, como buscar un ejemplo de código relevante en stackoverflow). (Tenga en cuenta que hay mucho más: análisis de algoritmos, estructura de datos, computabilidad y teoría de la compleción, etc.)

Los trabajos corporativos parecen mucho más superficiales en comparación con esto, ya que (generalmente) no implican la resolución de problemas “profundos”. Sin embargo, tendrá que aprender mucho en el trabajo, pero eso debería ser muy fácil ya que ya entiende cómo la mayoría de las cosas funcionan bajo el capó. (De acuerdo, puede que sea demasiado simplificador, pero entiendes el punto).

Eso es como preguntar por qué la gente aprende a Shakespeare en la universidad cuando la investigación de mercado muestra que la gente realmente solo quiere leer 50 tonos de gris.

La base de datos, el procesamiento de datos y los servicios web son solo dominios separados, aún necesita algoritmos y lógica para resolver problemas en estos dominios. El conocimiento de estos dominios, solo en el nivel de api, llevaría a productos por debajo de la media.

¿Qué herramientas intelectuales de resolución de problemas crees que podrías equipar a alguien si no algoritmos y lógica?

Habiendo dicho eso, parece que somos muy pobres en la enseñanza de estas cosas. Tengo la clara impresión de que la mayoría de los desarrolladores no pudieron codificar ningún tipo de algoritmo, ver los sistemas de tipos como un obstáculo que hay que superar (“I * love * Python”, “¿no es más fácil cuando solo usamos el tipo de objeto?”, etc.), y OO como una especie de club universal con el cual ofuscar cualquier solución (“¿Su solución toma cientos de líneas y toda una jerarquía de clases? ¿Sabe que puede hacerlo en un par de líneas de F #?” “Eso es no Empresa … “)

Sin una lógica no puedes entender o analizar un trabajo. Entonces, aunque piense que realmente no está utilizando algoritmos y lógicas en los escenarios corporativos del mundo real, lo usa todos los días para el desarrollo del código, la depuración y las pruebas.

¿Se puede crear una terraza sin pilares?

La respuesta es obvia: NO

Ese mismo principio funciona aquí también.
Los conceptos que se enseñan en las escuelas son la base para comprender los productos de software que se desarrollan o se desarrollarán en la industria del software.

-El problema de la estandarización.

Pídale a un experto que le enseñe a alguien lo que hace en un aprendizaje y expondrá lentamente al alumno a una multitud de tareas diarias y aumentará su alcance a medida que el alumno aprende y adquiera autonomía a través de la observación y la retroalimentación de prueba y corrección oportunas.

Esto se haría desde el nivel de intuición del experto (consulte el modelo de adquisición de habilidades de Dreyfus – conocimiento experto) porque en el mundo real, las empresas no se benefician de la venta de lógica o algoritmos independientes, sino de la venta de soluciones comerciales.

Por otra parte,

Pídale a un experto que analice todo su conocimiento para que pueda ser enseñado a cientos o miles de alumnos “de manera confiable” (ver Confiabilidad y Validez), y de repente su conocimiento intuitivo se descompone en tediosamente temas monolíticos que se expanden en sus propios Campos de detalle abstractos.

Es válido, pero muy abstracto … y definitivamente no intuitivo.

Hace poco me hice esta pregunta y luego me sentí casi paralizado por la velocidad de cambio y la variedad de herramientas que existen para hacer la misma tarea.

Más tarde descubrí que esto se llama análisis de desarrollo, y es muy real. Entonces, ¿qué haces para mantenerte a flote en una situación como esta?

Desarrolla la base algorítmica más sólida que pueda y, con suerte, cuando sea lo suficientemente bueno para ser un generalista, verá que hay más de una manera de resolver un problema. Y no tienes miedo de probar algunos …

Porque el resto de las cosas cambia constantemente y lo que es relevante hoy puede ser inútil mañana. Tener el conocimiento fundamental y la comprensión de los algoritmos y las estructuras de datos, por otro lado, siempre es relevante y le permite mantenerse actualizado.

Debido a que las prácticas de codificación y los idiomas específicos cambiarán, independientemente de lo que la escuela haya elegido para enseñarte, probablemente no estarás actualizado antes de que te gradúes, pero la lógica y los algoritmos son eternos.