¿Qué debería aprender un estudiante de CS en su propio tiempo, que no aprenderán en la escuela?

Si ha dedicado tiempo a la programación, sabe que la literatura está centrada casi exclusivamente en aplicaciones. CS en las universidades está orientado de manera similar. Se trata de hacer las cosas, aunque la facultad trata de darle una base teórica que debería ayudarlo a abordar los problemas de una manera más hábil. Le brindará cierta exposición a algunas técnicas probadas y verdaderas que también se han desarrollado para diferentes sistemas. El objetivo de esto es que sepa en qué trabajará para resolver los problemas, de modo que pueda aprovecharlos al máximo.

Dado que considero que la programación es “leer y escribir” en el ámbito de la computación, comparo el CS que se enseña en la mayoría de las instituciones con una especialización en inglés, aunque sin el requisito de la literatura. En otras palabras, le ayuda a “escribir” mejor y hacer un mejor uso de los materiales que usará como “escritor”, aunque no le da una base en otros grandes “escritores”, o por qué o cómo se le ocurrió la tecnología que está utilizando ahora. Como supongo que una especialidad en inglés no funciona, tampoco te da la idea de lo que es “escribir”. Te da algunas formas de “escritura” y sus reglas.

La historia que el departamento de CS presenta de su propia disciplina es notoriamente mala. Esto no es inusual. Me han dicho que es lo mismo en el departamento de ingeniería. Es probable que te expongas a un resumen del trabajo de Turing al crear una noción de computación y su concepto de máquina de Turing (BTW, es bastante interesante revisar el artículo de Turing, donde habla sobre su concepto de máquina: , Con una aplicación al problema Entsheidungs ​​”(en http://www.cs.virginia.edu/~robi…)). Probablemente también tengas un poco de historia en lenguajes de programación y sistemas operativos. Lo que presenten de este trabajo será bastante superficial.

Entonces, la mayor parte de lo que probablemente obtendrá es un poco de catecismo, pero poco sentido de dónde vino o cómo llegó a ser.

Un título de licenciatura en CS está diseñado para brindarle exposición a un montón de conceptos diferentes y diferentes formas en que se ha abordado la informática, con la expectativa de que los acepte como mejores prácticas, de modo que pueda usarlos para tener un mejor efecto en su futuro proyectos

Mi propia idea de lo que puede hacer para complementar lo que le falta es aprender tanto sobre la historia de la tecnología que le interesa como sea posible, pero centrarse en los investigadores a quienes se les ocurrieron las ideas (no tanto jugadores industriales), y qué los motivó a desarrollarlo. Desde allí, trate de encontrar entrevistas y artículos académicos escritos por esas personas, y lea lo que escribieron sobre su tema. Probablemente encontrarás ideas que tus profesores de CS no discuten en absoluto.

En segundo lugar, creo que es importante que los científicos informáticos se pregunten qué es la informática. Irónicamente, no creo que la CS académica se centre en eso. Te deja con la impresión de que los diferentes enfoques que presentan son de lo que trata la informática. En sus circunstancias informáticas comunes, lo es. Sin embargo, puedo asegurarle que, al pensar en la computación como un fenómeno, CS presenta un modelo de computación, pero no presenta todo lo que es posible en computación, en términos de arquitectura de hardware, los diferentes tipos de lenguajes de programación (es decir, funcional , orientado a objetos, de procedimiento, imperativo, etc.), o arquitectura de sistema de software (más allá de las separaciones típicas de sistemas operativos, interfaces de usuario, compiladores, intérpretes y herramientas). Escuchar a Ted Nelson es instructivo a este respecto.

Alan Kay tiene una lista de lectura (en http://www.squeakland.org/resour…) que utiliza con sus estudiantes. Hay muchos libros que no son de CS, pero creo que es seguro decir que vale la pena leerlos de todos modos. En cuanto a los textos de CS, le he oído recomendar encarecidamente:

  • Estructura e interpretación de programas de computadora (es importante hacer los ejercicios)
  • Aspectos básicos de los lenguajes de programación (en http://www.researchgate.net/prof…) (haga los ejercicios también)
  • La tesis doctoral de Ivan Sutherland, “Sketchpad: un sistema de comunicación gráfico hombre-máquina” (en http://www.cl.cam.ac.uk/techrepo…)
  • “Un nuevo enfoque para el diseño funcional de una computadora digital”, por Robert S. Barton (en https://www.scribd.com/doc/61812…)

Re. Sketchpad, hay más que el aspecto gráfico del sistema. También hay lecciones en la organización del sistema.

Otra recomendación de lectura que he escuchado de varios veteranos es mirar la p. 13 del “Manual del programador Lisp 1.5”. Alan Kay lo caracterizó como “Las ecuaciones de Maxwell del software”. No he podido encontrar una copia del manual en línea, pero está disponible en papel. Aquí hay una publicación de blog en esta página: Lisp como las ecuaciones de software de Maxwell. Ofrece un ejercicio interesante que quizás desee probar en su propio tiempo. 🙂 No necesitas conocer a Lisp para hacerlo. El código está escrito en Python.

La Dra. Kay actualmente trabaja en Viewpoints Research Institute, y ha estado publicando artículos con regularidad que le pueden interesar. Tal vez te inspires en ellos, como lo he hecho yo.

Creo que una cosa realmente importante para obtener información sobre computación que no veo discutida en CS es que es un método para modelar, que puede usarse para modelar la computación en sí misma, y ​​que se pueden ver artefactos como idiomas, sistemas operativos y aplicaciones. en términos de un modelo de cómputo y, este es un punto muy importante, que los modelos existen para ser explorados y mejorados.

Me parece importante mirar los artefactos informáticos con un ojo crítico hacia el diseño y la arquitectura, notando las diferencias entre, por ejemplo, la forma en que C hace algo y la forma en que Lisp hace lo mismo, y lo que es más fácil / difícil de lograr en cada uno, y por qué.

Algo en lo que he estado trabajando es tomar algo grande, como un sistema operativo o una aplicación como un procesador de textos, un navegador web, etc., estudiar la forma en que funciona mirando su código fuente y luego tratar de idear Una arquitectura que haría mejor el mismo trabajo. Por “arquitectura”, no estoy hablando de una estructura de datos, sino de una nueva forma de operar con información que la persona / personas que escribieron el original no lo intentaron, y que expresa el significado esencial de lo que está haciendo. tratando de implementar de manera más clara y elegante, y luego encontrar un medio de expresión que transmita ese significado de una manera que un tipo particular de usuario pueda entender (por ejemplo, a través de un lenguaje de programación que yo mismo creo).

Lo que le animaría a hacer es aplicar lo que los programadores saben a este esfuerzo, que es lo que aprende haciendo. Sin embargo, es mejor tener un buen medio para construir modelos computacionales. Por lo tanto, echaría un vistazo a los diferentes lenguajes de programación, y tal vez a las herramientas de programación, y vería cuáles cree que le ofrecen la mejor capacidad para construir su modelo y comenzar a trabajar con ellos. Puede descubrir uno o más de ellos a través de las lecturas anteriores.

Estos son algunos puntos de partida. No son una lista completa de “cosas por hacer” en su propio tiempo.

Sugeriría tres categorías de habilidades: negocios, relaciones interpersonales y diplomacia / negociaciones.

Algo no relacionado con la informática. Te recomiendo que aprendas sobre marketing, servicio al cliente, habilidades interpersonales y de comunicación. Estos te hacen destacar mejor. Por supuesto, tienes que saber cuál es tu plan de carrera.

Piense en sus metas en la vida y luego piense en las cosas que necesita para alcanzarlas.

Algunos estudiantes de CS desean ser fundadores, otros están contentos de trabajar en una startup, otros quieren inventar dispositivos geniales, encontrar lo que quieres ser y trabajar para lograrlo.

Recientemente comencé a trabajar en lo que tenía que hacer y la cantidad de cosas que tenía que aprender y constantemente tengo que aprender es una locura, como la gramática, el marketing, cómo encontrar usuarios, la contabilidad. Es bueno tener un co-fundador increíble que me enseña mucho.

Si aún no puede encontrar lo que quiere ser o lo que quiere hacer, intente aprender muchas cosas, si no ha visto este video, eche un vistazo:

Programación.

Sí, puede que tengas cursos. Sin embargo, para ser bueno en la programación hay que practicar. Mucho.

Gracias por A2A
Creo que lo más importante que debes aprender es el trabajo en equipo y la comunicación con otras personas. Lo que también necesita aprender es cómo aprender, pero esto generalmente viene “en passant”

Aprenda los marcos y cómo se utiliza el código en la industria en lugar de hacerlo simplemente para el rendimiento académico. Por último, haz algo que te interese. A los empleadores les encanta ver proyectos fuera de clase.

Debagyan, establezca un proyecto de programación que le resulte divertido de hacer y complételo. Haz matemáticas y estadísticas más allá del alcance de tu curso.

¡Buena fortuna!