¿Cuál es el mejor lugar para comenzar a prepararse para la investigación en lenguajes de programación?

Oh hombre, publicar un artículo sin un asesor en el tema va a ser complicado. No es que hacer investigación de PL por tu cuenta sea tan complicado, creo que PL es uno de los campos más accesibles en CS, pero podría estar sesgado, pero hay muchos otros factores involucrados.

Algunos de estos son problemas generales de investigación con los que cualquier profesor puede ayudar: cómo escribir un buen artículo, enviarlo a una conferencia, responder y realizar cambios basados ​​en las revisiones, etc. Definitivamente encuentre un profesor en algún campo que lo ayude con la investigación, incluso si no saben mucho sobre PL per se .

Otros problemas son específicos de PL y más difíciles de tratar. Una gran parte de la publicación de un artículo no es solo la calidad de la investigación, sino también la resolución de un problema que es interesante y relevante para lo que otros están haciendo en el campo. Mantener el pulso de la comunidad de investigación en general es algo que requiere experiencia y una de las formas en que un buen profesor puede ayudarlo a publicar con éxito.

Un año y medio no es mucho tiempo. Es suficiente escribir un documento, pero es muy probable que su documento sea rechazado al principio. (Le pasa a todos .) Es posible que deba continuar trabajando en su proyecto o al menos actualizar y volver a enviar su trabajo después de graduarse. Esto está perfectamente bien, no hay una regla que diga que debe estar inscrito para publicar un artículo, pero requiere cierta perseverancia adicional de su parte. Algo que debes tener en cuenta.

Tampoco es mucho tiempo para obtener una amplia experiencia en todo el campo. Tendrá que elegir una parte del campo que le guste, aprender sobre eso y hacer una encuesta de los documentos actuales sobre el tema. Hay dos partes en esto: recoger el conocimiento de fondo que necesita y quedar atrapado en avances de investigación específicos en ese subcampo.

Honestamente, creo que la primera parte es más complicada porque los recursos generales están por todas partes. Dado un tema, la mejor manera de obtener una visión general es buscar clases y seminarios sobre el tema en otras universidades. Puede consultar sus apuntes y los libros que usan.

Personalmente, evitaría campos más profundos como los compiladores y la teoría PL a menos que ya tengas algo de experiencia con ellos. Los compiladores tienen muchos detalles complicados que tendrías que aprender y encontrar algo nuevo requiere un amplio conocimiento de los compiladores existentes, la mayoría de los cuales no encontrarás en los libros. La teoría es realmente profunda. Hacer contribuciones significativas requiere una comprensión no solo de los temas relevantes de CS sino también de algunas áreas de posgrado de matemáticas.

Para ser claros: ambas son áreas útiles de conocimiento, pero esperan usar ideas de compiladores y teorías en lugar de contribuir directamente a esos campos.

Soy un gran admirador de la programación funcional y hay muchas áreas de investigación interesantes en FP a las que puede acceder simplemente aprendiendo Haskell u OCaml relativamente bien. Otro gran lugar para mirar es diseñar lenguajes específicos de dominio (DSL) y herramientas para ellos. Por supuesto, los dos campos también son maravillosamente complementarios: los lenguajes funcionales como Haskell y Racket son anfitriones perfectos e idiomas de implementación para DSL.

Una vez que haya elegido el tema más amplio que desea seguir y haya obtenido una buena formación en él (probablemente revisando un libro o dos y tal vez haciendo un pequeño proyecto), puede comenzar a ver qué áreas de investigación están activas actualmente.

Comience hojeando los documentos de las recientes conferencias de PL (POPL, PLDI, ICFP, OOPSLA y algunos otros) hasta que encuentre una idea o tema que le guste. Luego, rastree el tema hasta algunos de sus documentos fundamentales, por lo general, el documento más antiguo sobre ese tema en las referencias es donde desea estar. Comenzando allí, averigüe exactamente qué está pasando y haga una pequeña encuesta del espacio. Tome algunas notas o incluso escriba una pequeña encuesta para su propio consumo. (Incluso si no lo va a leer , escribir algo lo obliga a comprender el área más completamente).

Por ejemplo, podría comenzar con “Practical Principled FRP” de ICFP 2015. (FRP significa “Programación funcional reactiva”, que es una de mis áreas favoritas de investigación activa en programación funcional). Al principio, probablemente no entenderá el documento, pero puede consultar sus referencias para otros documentos sobre FRP. El artículo más antiguo al que se hace referencia anteriormente es el documento FRAN, que es, de hecho, la primera formulación de FRP. Encuentre un montón de otros documentos sobre FRP a través de Google y tendrá una excelente visión general de lo que está sucediendo y algunas preguntas abiertas. Además, no pase por alto las contribuciones que no son estrictamente documentos como paquetes de software que implementan las ideas reales. (En este caso, la primera referencia del documento de ICFP es en realidad un proyecto como este: la biblioteca reactiva del banano).

Una idea que sugeriría particularmente en su caso es ver cómo puede combinar la investigación de PL con algún otro tema para el que su universidad tenga un profesor. La investigación multidisciplinaria como esta no solo es profunda, sino que también es extremadamente moderna. Será más fácil para un profesor que no sabe mucho sobre PL específicamente brindarle mucha más ayuda en su investigación. Esta es la razón por la cual los lenguajes específicos de dominio en particular son un excelente lugar para comenzar: el objetivo es aplicar ideas PL a un nuevo dominio . También es razonablemente fácil encontrar algo novedoso y útil porque hay muchos otros dominios que no tienen muchos idiomas o herramientas construidas.

Entonces, si quieres un plan realmente concreto: aprende programación funcional con Haskell o Racket. Lea sobre los diferentes idiomas de dominio específico que las personas han implementado en esos. Hable con un profesor acerca de cómo un DSL podría ser útil para su campo particular. Voila: un interesante proyecto orientado a PL.

Te sugiero que encuentres un profesor que esté dispuesto a hacer un estudio dirigido y comiences trabajando en algunos de los textos clásicos sobre el tema:

Compiladores: Principios, técnicas y herramientas (2ª edición): Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: 9780321486813: Amazon.com: Libros

Elaboración de un compilador: Charles N. Fischer, Ron K. Cytron, Richard J. LeBlanc Jr .: 9780136067054: Amazon.com: Libros