(Cuándo) Debo aprender compiladores?


De acuerdo con esto http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html artículo, defnitely debería.

Cita ejecutivo suave, pero insistente resumen: Si no sabes cómo los compiladores funcionan, entonces no sabes cómo funcionan las computadoras. Si no tienes 100 años% seguro si sabes cómo compiladores trabajo, entonces no sabes cómo trabajo.

Pensé que era un artículo muy interesante, y el campo de aplicación es muy útil (hazte un favor y lean) Pero, de nuevo, he visto ingenieros sw exitosos que no conocían muy bien los compiladores, o la arquitectura interna de la máquina para el caso, pero sabía una cosa o dos de cada elemento en la siguiente lista :

  • Un paradigma de programación (OO, funcional, functional)
  • Una API de lenguaje de programación (C#, Java..) y al menos 2 muy diferentes algunos dicen! (Java / Haskell)
  • Un marco de programación (Java,. NET)
  • An IDE para hacerte más productivo (Eclipse, VisualStudio, Emacs,....)
  • Mejores prácticas de programación (ver reglas fxcop, por ejemplo)
  • Principios de Programación (SECO, Alta Cohesión, Acoplamiento Bajo, ....)
  • metodologías de Programación (TDD, MDE)
  • Patrones de diseño (Estructural, Conductual,....)
  • Fundamentos Arquitectónicos (Niveles, Capas, Modelos de Procesos (Cascada, Ágil, {)
  • Una Herramienta de prueba (Unidad Pruebas, Pruebas de Modelos, {)
  • Una técnica GUI (WPF, Swing)
  • Una herramienta de documentación (Javadoc, Sandcastle..)
  • Un lenguaje de modelado (y tal vez una herramienta) (UML, VisualParadigm, Rational)
  • (sin duda olvidando cosas muy importantes aquí)

No todas estas herramientas son necesarias para ser un buen programador (como una GUI cuando simplemente no la necesitas) pero la mayoría lo son. ¿De dónde vienen los compiladores, y son realmente que importante, ya que, como he mencionado, muchos programadores parecen estar haciendo bien sin conocerlos y sobre todo, convertirse en un buen programador se ve la multitud de dominios de conocimiento casi un logro de toda la vida: -), por lo que incluso si los compiladores son extremadamente importantes, ¿no hay siempre cosas aún más importantes?

O debería ordenar 'Los Compiladores Unleashed Biblia Ilimitada (en 24H..))) ¿hoy?

Para aquellos que han leído el artículo y quieren comenzar a estudiar de inmediato :

Recursos de Aprendizaje sobre Analizadores, Intérpretes y Compiladores

Author: Community, 2009-04-09

9 answers

Si solo quieres ser un codificador corriente, y escribir cosas... no es necesario tomar compiladores.

Si quieres aprender ciencias de la computación y apreciar y realmente convertirse en un científico de la computación, DEBE tomar compiladores.

Los compiladores son un microcosmos de la informática! Contiene todos los problemas, incluyendo (pero no limitado a) AI (algoritmos codiciosos y búsqueda heurística), algoritmos, teoría (lenguajes formales, autómatas), sistemas, arquitectura, sucesivamente.

Se puede ver un montón de ciencias de la computación se unen de una manera increíble. No solo entenderás más sobre por qué los lenguajes de programación funcionan de la manera que lo hacen, sino que te convertirás en un mejor codificador por tener esa comprensión. Aprenderás a entender el nivel bajo, lo que ayuda en el nivel alto.

Como programadores, a menudo nos gusta hablar de que las cosas son una "caja negra"... pero las cosas son mucho más suaves cuando se entiende un poco acerca de lo que está en el cuadro. Incluso si no construyes un compilador completo, seguramente aprenderás mucho. Podrá ver los formalismos detrás del análisis (y darse cuenta de que no es solo un montón de casos especiales hackeados juntos), y un montón de problemas completos de NP. Verás por qué la teoría de la informática es tan importante de entender para las cosas prácticas. (Después de todo, los compiladores son extremadamente prácticos... y no tendríamos los compiladores que tenemos hoy sin formalismos).

Realmente espero que consideres aprender sobre ellos... te ayudará a llegar al siguiente nivel como informático: -).

 35
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 07:31:07

Deberías aprender acerca de los compiladores, por la sencilla razón de que implementar un compilador te hace un mejor programador. El compilador seguramente apestará, pero habrás aprendido mucho durante el camino. Es una gran manera de mejorar (o practicar) su habilidad de programación.

 8
Author: JesperE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 07:16:38

No es necesario entender a los compiladores para ser un buen programador, pero puede ayudar. Una de las cosas que me di cuenta al aprender sobre ellos, es que compilar es simplemente una traducción.

Si alguna vez ha traducido de un idioma a otro, acaba de hacer la compilación.


Entonces, ¿cuándo debería aprender sobre los compiladores?

Cuando lo desea, o lo necesita para resolver un problema.

 4
Author: Unknown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 06:59:34

Si vas a trabajar a un nivel lo suficientemente alto donde te estás preocupando por UML y el código autodescriptivo, fácilmente podrías ir toda tu carrera sin querer o necesitar detalles íntimos de cómo funciona el compilador.

Pero, si eres un codificador en las trincheras y no tienes aspiraciones de manejar a tus amigos, es probable que un día te des cuenta de que estás librando una guerra con tu compilador. Podría ser un error aleatorio que aparece o una conversación en el pasillo sobre while-verses-for bucle. Te darás cuenta de que la asamblea (o IL, probablemente, en los próximos años) está un poco a la izquierda de lo que necesitabas y otro universo se desplegará.

Así que, supongo que mi respuesta es, solo tenga en cuenta que el compilador por ahora, está haciendo mucho, pero no se preocupe demasiado.

 4
Author: overslacked,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 07:20:21

La teoría del compilador es útil, pero no esencial.

Aunque hay algunas técnicas que son útiles, como el análisis léxico y el análisis.

Otro es el manejo de errores. Los compiladores necesitan muchos de estos. La entrada del usuario puede contener cualquier cosa, incluso lo inesperado. Y tienes que lidiar con todo esto.

 3
Author: Toon Krijthe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 07:01:04

Si tiene la intención de escribir código en tiempo real extremadamente crítico, se beneficiará de entender cómo el compilador optimiza su código. Sin embargo, en realidad se beneficiará más al comprender la arquitectura subyacente de su hardware.

Desde mi experiencia, si entiendes cómo funciona el hardware y cómo el compilador interpreta tu código, podrás escribir código que haga exactamente lo que pretendes que haga. He sido capturado en varias ocasiones, escribiendo código que me optimizó el compilador e hizo que el hardware hiciera algo que no pretendía.

En general, entender toda la pila de software-hardware no es esencial para escribir buenos algoritmos y código, pero sin duda ayudará!

 3
Author: sybreon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 07:55:04

Desde una perspectiva práctica, la teoría general del compilador es menos de preocupación que un ensamblador, enlazador y cargador a una plataforma específica. Por ejemplo, solo considero el compilador GCC como un traductor de mi lenguaje C de alto nivel al lenguaje ensamblador de bajo nivel en una plataforma x86. Y más a menudo que no, manualmente refino ;) el código generado por el compilador.

Desde una perspectiva científica, le sugeriría fuertemente que aprenda la teoría del compilador, lo hará ayudarle a entender la gran idea sobre la que se basa la computadora. Y aún más, usted tendrá un ojo diferente sobre el mundo.

 2
Author: smwikipedia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-02 09:17:46

Los cursos de compiladores generalmente se centran en cómo se analiza el código de alto nivel y se traduce en código máquina. Eso es muy interesante, pero no crucial. Es más importante entender lo que es este código máquina que es generado por el compilador para que usted entienda cómo funciona una computadora y cuál es el costo de cada construcción de lenguaje.

Así que prefiero decir que usted debe saber un lenguaje ensamblador (me refiero a un subconjunto limitado de lenguaje ensamblador para una arquitectura) para entender cómo funciona una computadora y esto último es definitivamente necesario para un programador competente para que entienda qué es la falla de segmentación, cuándo optimizar y cuándo no y otras cosas similares de bajo nivel.

 1
Author: sharptooth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-09 07:37:20

Solo mi opinión, pero creo que los compiladores no se le da suficiente atención en los cursos de CS, no en la mía, y no en cualquier otro afaik. Creo que cualquier CS mayor debe hacer 2 cosas después de un año sabático o terminar su mayor: Volver a aprender si es necesario autómatas finitos y tal vez un lenguaje de métodos formales. Aplícalo. Escriba un compilador simple con este conocimiento. Alex Aiken tiene un tutorial en línea muy útil sobre cómo escribir un compilador para el COOL (Classroom Object Oriented Language), que es un subconjunto de Scala como de 2013 ver. Al menos en el momento de escribir.

 0
Author: magneto12321,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-01 13:55:44