computer science - salary - ¿Qué tema de informática estoy tratando de describir?
computer science pdf (9)
He estado programando por alrededor de ... 6-> 8 años, y comencé a darme cuenta de que realmente no sé lo que realmente sucede en el nivel bajo cuando hago algo como
int i = j%348
La cosa es que sé lo que j% 348 hace, divide j por 348 y encuentra el resto. Lo que no sé es cómo la computadora hace esto.
Del mismo modo, se que
try
{
blah();
}catch(Exception e){
blah2();
}
invocará a blah
y si bla lanza, invocará a blah2
... sin embargo, no tengo idea de cómo la computadora hace esto en lugar de errar ... bloquear o finalizar la ejecución.
Y me imagino que para poder mejorar en la programación, probablemente debería saber qué está haciendo realmente mi código. [Esto probablemente también me ayudaría a optimizar y ... errar ... no hacer cosas estúpidas]
Me imagino que lo que estoy pidiendo es probablemente algo enorme que se enseña en las universidades o algo así, pero para ser honesto, si pudiera aprender un poco, sería feliz.
El punto de la pregunta es:
¿Sobre qué tema / curso de informática estoy preguntando? Porque con toda honestidad, no lo sé.
Como no sé cómo se llama el tema, no puedo encontrar un libro o un recurso en línea para aprender sobre el tema, así que estoy un poco atascado. Estaría eternamente agradecido si alguien me ayudara = /
¿Nadie está hablando de matemática para módulo? Primer semestre de informática en medios (estoy en el quinto), curso: Matemáticas:
10% 3 =?
x% y = z
Cálculo:
- 10/3 = 3.33333
- 3.3333 redondeado a 3
- 3 * 3 = 9
- 10 - 9 = 1
Como un formulario:
10 - (Math.round (10/3) * 3) = 1
Con variables:
x% y = x - (Math.round (x / y) * y)
Entender binario y comprenderá que cada operación matemática se basa en la suma.
Creo que estás viendo cómo un compilador traduce un código de lenguaje de alto nivel a instrucciones de máquina. Echa un vistazo al diseño del compilador. Este es un book clásico.
El libro mencionado anteriormente, "Los elementos de los sistemas de computación: Construyendo una computadora moderna a partir de los primeros principios", por Noam Nisan y Shimon Schocken, aborda los tipos de preguntas que plantea de manera integral: desde la arquitectura a la VM, desde los compiladores al SO.
El mecanismo real utilizado para calcular el módulo es probable que varíe entre los idiomas y luego entre la implementación de cada idioma. Hay algo de información sobre los algoritmos here .
Tal vez los algoritmos es el área general que te interesa?
La primera parte podría considerarse ingeniería informática, pero la segunda es solo el diseño del lenguaje.
Si no quiere gastar dinero, hay un gran libro llamado "Fundamentos de organización y diseño de computadoras" disponible here (enlace PDF). También recomiendo "Código" por Charles Petzold, publicado por Microsoft Press.
Suena vagamente como si estuvieras hablando de construcción de compiladores y diseño de lenguaje.
La (más) "cosa CS" general que puede implementar excepciones es probablemente una continuación (tal como se encuentra en, entre otras cosas, el Esquema). Si no ha leído la "Estructura e interpretación de los programas de computadora" (SICP, página web aquí, incluido el texto completo ), puede valer la pena darle un vistazo rápido, toca ligeramente la construcción del compilador.
Yo diría que la primera parte es la arquitectura de la computadora, mientras que la segunda parte es el lenguaje de programación.
Algunos buenos libros sobre arquitectura de computadoras, si está interesado en comprender un poco más sobre cómo la computadora ejecuta un programa, son:
- Los elementos de los sistemas de computación: construyendo una computadora moderna a partir de los primeros principios , por Noam Nisan y Shimon Schocken
- Organización estructurada de la computadora , por Andrew Tanenbaum
No estoy seguro de qué recomendar para comprender las construcciones del lenguaje de programación, como detectar excepciones. Probablemente un buen libro de compiladores.
Especialmente con su segundo ejemplo, diferentes lenguajes de programación podrían implementarse de manera muy diferente. Por ejemplo, un lenguaje que se ejecuta en una máquina virtual como Java, tendría la máquina virtual para protegerla y lanzar ciertos tipos de excepciones, mientras que en C ++ esto se manejaría de manera diferente.
Primero debe ver el ensamblaje y luego el diseño del compilador . Si no conoces el ensamblaje, estarás completamente perdido con el diseño del compilador. Personalmente, estoy empezando con el ensamblaje, por el motivo exacto en el que está: quiero entender qué está haciendo mi código en un nivel inferior.
Encontré este recurso, que es muy bueno: http://en.wikibooks.org/wiki/X86_Disassembly
Básicamente, es un libro de ensamblaje que explica algunos de los conceptos de cómo se ejecuta el código de nivel superior en el ensamblado, y tiene algunos ejemplos en los que muestra cómo un compilador puede generar funciones, etc., en ensamblado.