Serguéi Trofímov
Recientemente, a menudo escucho que la filosofía está muerta. Que junto con la era de Aristóteles, Hegel, Berdyaev, también se fue la filosofía, que ahora la mente de las personas está completamente ocupada por las ciencias exactas, y no queda lugar para la filosofía. Pero la filosofía es ante todo una visión del mundo, un prisma a través del cual una persona percibe el mundo que le rodea, su lugar en este mundo, su lugar entre las personas que le rodean. La humanidad, habiendo recibido con la ayuda del progreso tecnológico, nuevas herramientas para estudiar el mundo que la rodea, al mismo tiempo recibió herramientas para influir en este mundo y en sí mismo como parte del medio ambiente. La gente necesita urgentemente comprender su lugar en las condiciones del progreso tecnológico, la influencia de las innovaciones técnicas en la persona misma, para cultivar un manejo cuidadoso del poder gigantesco que el progreso técnico le da a la humanidad.
Introducción.
La programación como parte de la cibernética apareció recién en el siglo XX. El surgimiento de la cibernética, a su vez, fue preparado por una serie de logros científicos y científicos naturales en el campo de la teoría del control automático y la radioelectrónica, que hicieron posible diseñar dispositivos informáticos de alta velocidad.
Al principio, cuando los programas para tales dispositivos eran bastante simples, los manejaban los propios fabricantes de computadoras. Pero con el aumento de la complejidad y el aumento del volumen de programas, comenzaron a requerirse personas con una formación especial y, lo que es más importante, con una forma de pensar especial, que fueran capaces de "dar vida" al "cerebro" electrónico cada vez más inteligente. Luego comenzaron a considerar la escritura de programas para computadoras electrónicas como un tipo especial de actividad intelectual, que a veces se compara con el arte.
En el sentido amplio de la palabra, el término “programación” se refiere a la compilación de programas para dispositivos técnicos. Aquí consideraremos los problemas de programación para dispositivos informáticos controlados por programas como las computadoras personales, que son más accesibles para una amplia gama de personas y que están lo suficientemente desarrollados para la llamada "programación inteligente". El término "programación inteligente" se entenderá aquí como la compilación de dichos programas que pueden competir con la mente humana o ayudarla a resolver problemas intelectuales.
Las computadoras electrónicas, a diferencia de los dispositivos que convierten energía o materia, operan con información que no es material. El concepto de "información" como cuerpo de conocimiento es importante para comprender los procesos profundos de la programación. La información es el conocimiento puro que una persona ha transferido desde su cerebro a un medio material o electrónico. Manejar esta información, procesarla, transformarla una en otra, buscar en conjuntos gigantescos de conocimiento requiere un pensamiento algorítmico preciso e instrucciones claras para llevar a cabo este trabajo.
Sin embargo, es imposible no tener en cuenta el efecto inverso de la computadora electrónica en la mente humana. Cómo cambia el estilo de vida de una persona, su comportamiento y valores espirituales bajo la influencia del progreso cibernético. Este artículo considerará los temas de la influencia de los programas en la personalidad humana y la influencia de la persona misma en los programas, los problemas morales y éticos de la programación y otros temas igualmente importantes.
Encarnación electrónica del pensamiento humano.
Es sabido que el producto de la actividad social material y espiritual de las personas es el conocimiento. En la antigüedad, las personas recibían conocimientos basados en su experiencia personal, por ensayo y error. Algunos instintos fueron establecidos por la naturaleza, pero estos instintos eran inferiores, los animales y el conocimiento no lo eran, ya que no se formaron sobre la base de la actividad humana. Como resultado de la lucha evolutiva en humanos, además del primer sistema de señales para reflejar la realidad común con los animales, se formó un segundo sistema de señales: verbal, asociado con el pensamiento abstracto verbal, que hizo posible intercambiar el conocimiento adquirido a través del habla. .
Antes del advenimiento de la escritura, el conocimiento adquirido por las personas se transmitía de boca en boca, de padre a hijo, de abuelo a nieto, convirtiéndose en leyendas, cuentos de hadas y epopeyas, perdiendo cada vez más el hilo del conocimiento objetivo y adquiriendo un toque personal. Experiencias de cada narrador.
Con el advenimiento de la escritura, se produjo un cambio radical en el estudio de la naturaleza y los fenómenos naturales. El conocimiento comenzó a acumularse y transmitirse a las siguientes generaciones con precisión, sin distorsión. Sobre la base de este conocimiento surgieron ciencias que no se basaban en la experiencia de un individuo en particular, sino que acumulaban la experiencia de cientos y miles de personas. Una persona ya no necesitaba aprender el mundo por ensayo y error, era posible, habiendo estudiado la experiencia registrada de generaciones anteriores, imaginar una imagen del mundo que lo rodeaba, gastando desproporcionadamente menos tiempo y esfuerzo en esto.
Con el desarrollo de la ciencia y la tecnología, los portadores del conocimiento también cambiaron. Si bien los materiales impresos contenían toda la información acumulada, requerían cada vez más espacio para su almacenamiento. Encontrar la información necesaria entre millones de volúmenes de información se hizo cada vez más difícil. La vida humana requería no sólo la preservación de lo acumulado como resultado actividad científica conocimiento, sino también la conservación y el procesamiento de la información especializada necesaria para la vida cotidiana de la sociedad. Un ejemplo es la contabilidad en diversas áreas de la actividad comercial, la contabilidad estadística.
Con el advenimiento de las computadoras electrónicas, se hicieron intentos para trasladar la mayor parte del trabajo rutinario de recopilación y procesamiento de información a los "hombros de hierro". Pero solo hoy, cuando hay computadoras personales en casi todos los hogares, se puede decir con certeza que las computadoras han capturado y tienen la palma de la mano en el trabajo con información.
Al principio, las computadoras realizaban solo operaciones rutinarias de conteo y búsqueda, luego los programas de computadora se volvieron cada vez más complejos, su lógica de trabajo comenzó a acercarse al trabajo del cerebro humano. Los programas de computadora ya juegan juegos tan inteligentes como el ajedrez mejor que los humanos. Un ejemplo de esto es la victoria del programa Deep Blue en una partida de ajedrez contra el campeón mundial Garry Kasparov.
En el nivel más bajo, un programa es una colección de miles de millones de bits simples de información, ceros y unos. La computadora convierte estos bits de información en un algoritmo lógico interno, que se vuelve cada vez más complejo a medida que aumenta el tamaño del programa. El cerebro humano funciona de la misma manera. Su actividad se basa en impulsos eléctricos pulsantes entre neuronas, que se convierten en pensamientos y órdenes a los órganos humanos. Pero hay una gran diferencia entre el funcionamiento de una computadora y el cerebro humano. Un programa es escrito una vez por una o más personas y se ejecuta en una computadora. Y una persona cambia su "programa" de comportamiento cada segundo, puede reaccionar a los mismos estímulos de diferentes maneras, la actividad del cerebro, mejorando constantemente su propio programa interno, está más allá de toda descripción. Es el pensamiento humano el que está incrustado en "cerebros" electrónicos, claramente descrito, descompuesto en miles de millones de bits de información, y simplemente no hay dónde llevar más de lo que invierte una persona. Se puede dar un ejemplo sencillo. el programa es el gran libro escritas por personas y páginas completamente nuevas que no están escritas por nadie, nunca las habrá. Puede agregar algunas páginas nuevas o incluso indicarle a la computadora que lo haga, pero en este caso, las páginas nuevas se ensamblarán a partir de lo que ya está dentro de la "mente de hierro".
Programación: ¿arte o artesanía?
Una persona recibe satisfacción estética cuando crea algo con sus propias manos, cuando una obra de arte sale de debajo de las manos de un maestro, lo que da placer no solo al creador, sino también a muchas decenas y miles de personas, te hace experimentar sentimientos de alegría, tristeza, odio, etc.. El arte tiene como tarea revelar la verdad en forma sensual, en el diseño artístico.Desde este punto de vista, el programa también puede ser considerado como una obra de arte.
Tan pronto como apareció el concepto mismo de programación, la gente comenzó a tener una pregunta: ¿programar es un arte o un oficio?
El arte como reflejo estético de la realidad también está presente en la programación. El programador puede modelar objetos del mundo real tal como los ve y transformarlos como mejor le parezca. Sin embargo, simplemente modelar objetos del mundo real no es suficiente para crear una obra de arte. Aquí nos acercamos a la cuestión de cuándo, de hecho, algo deja de ser un simple oficio utilitario y pasa a la categoría de obras de arte.
Puede colgantes un ejemplo simple. Si un sastre cose ropa para el uso diario, por lo general a nadie se le ocurre llamar a tal cosa una obra de arte, pero hay casas modelo especiales donde la ropa hecha por diseñadores de moda famosos se presenta a la audiencia, a menudo en una sola copia. cuya contemplación proporciona a los conocedores un verdadero placer. ¿No es esto una obra de arte? Se puede suponer que uno de los signos de una obra de arte será una creación única y exclusiva. Sin embargo, a nadie se le ocurre que los poemas de poetas famosos, después de haber sido publicados en millones de copias, han perdido su belleza. Pero después de todo, los poemas fueron escritos una vez, como, por ejemplo, una escultura. Y luego fueron reescritos, en muchos miles de copias. Estas copias no han perdido la belleza y el atractivo del original.
Hay su propia atracción y belleza en los conjuntos arquitectónicos e incluso en los mecanismos producidos por la mente y las manos humanas. No en vano no están vacías las salas del Museo Politécnico de Moscú, donde se recogen maquetas y ejemplos “vivos” de la “evolución” de los mecanismos creados por el hombre en distintas épocas y en distintos países.
Un programa de computadora es una creación de la mente humana que absorbe la belleza tanto del lenguaje como del mecanismo. La manifestación gráfica externa de los programas está incorporada en el concepto de "gráficos de computadora". Ahora, los gráficos por computadora han ocupado el lugar que les corresponde entre áreas del arte como la pintura, la cinematografía y la animación. Una persona tiene en sus manos una herramienta que le permite convertir sus fantasías en imágenes reales y mostrárselas a una amplia audiencia de espectadores. El lado técnico de los gráficos por computadora ha alcanzado tales alturas que el cerebro humano no puede distinguir las imágenes creadas en tiempo real por una computadora electrónica de las reales. Sin embargo, detrás de cada pintura generada por computadora está su verdadero creador humano. La computadora es la lente que magnifica y da a conocer las ideas e imágenes en lo profundo de la mente humana. Una computadora puede compararse con el caballete de un artista o la cámara de un director de cine.
Sin embargo, no debemos olvidar que no todo poema es una obra de arte y no todo largometraje trae satisfacción estética. La impresión depende fuertemente de la personalidad del creador, de su destreza y habilidad para poner su alma en la obra. Y sólo cuando el programa, como cualquier otra cosa, se hace con alma, con plena dedicación, cuando se invierte en la obra todo el sentimiento, la experiencia y la mente del creador, sólo entonces el programa sale de la categoría de simple artesanía, y su creador de la categoría de artesanos.
Encarnación del individuo en el programa.
Concepto filosófico conocido: un reflejo del "yo" humano en las actividades del individuo. Como en cualquier actividad, un programador invierte su conocimiento, experiencia y un buen programador y su alma en el programa que se está creando. Cada individuo, habiendo adquirido alguna experiencia previa, la pone en las cosas que crea. Y el programador no es una excepción. El programa encarna su visión del mundo y su actitud. La computadora se convierte, por así decirlo, en una extensión de la mente humana. Actuando de acuerdo con un programa establecido por una persona, una computadora "habla" con las palabras que una persona le pone y en ciertas situaciones responde de la forma en que respondería la persona que lo programó. Escribir un programa es como criar a un niño. Solo la educación lleva toda la vida, y la programación todavía tiene un tiempo limitado. Así como un programador le explica a un niño pequeño lo que debe hacer la computadora en tal o cual situación. Cuáles serán las consecuencias de sus acciones y qué será necesario hacer para cambiar estas consecuencias. Y así como la crianza de un niño depende de la personalidad y el ejemplo de los padres, el programa depende de la personalidad del programador. Una buena persona invertirá en una computadora un conjunto de acciones que ayudarán a las personas en su trabajo, estudio u ocio. Un irresponsable le “enseñará” a una computadora a romper, destruir, destruir el conocimiento creado por otras personas. Un ejemplo típico es el flujo inagotable de los llamados virus informáticos, programas que, copiándose de una computadora a otra, tienen un efecto destructivo en los sistemas informáticos, ejecutando el algoritmo destructivo inherente a ellos.
El impacto del programa en el individuo.
Una persona tiene un sentido profundamente desarrollado de seguir a las autoridades, siguiendo al líder. Este rasgo se desarrolla desde la infancia, cuando cada adulto era un líder para una personita. Todo lo que dijeron los adultos era una verdad indiscutible, no sujeta a duda. Al crecer, una persona comienza a criticar el mundo que lo rodea y las opiniones de otras personas. Sin embargo, este enfoque crítico depende en gran medida de la visión del mundo, la educación y la experiencia de vida de la persona. Hay cierta regularidad en que una persona es menos crítica con la palabra impresa que con la viva. Esto se debe al desarrollo del sistema de educación humana. Mayoria el conocimiento científico el individuo recibe a través del material impreso. Y por en general La cosmovisión de una persona se forma precisamente en el proceso de aprendizaje. Es durante estos años que se establece una comprensión del mundo y del lugar del individuo en él. Se está formando un sistema de valores y autoridades. Fue en este momento que la relación con la palabra impresa, como una autoridad indiscutible, se establece profundamente en el subconsciente. Uno puede recordar los tiempos recientes de la censura socialista, cuando toda la información dada a través de los medios impresos fue cuidadosamente filtrada y peinada para sacar a relucir la llamada "cosmovisión comunista".
Ahora la autoridad de los medios impresos se ha perdido en gran medida. Los libros de texto de historia se reescriben con envidiable frecuencia. Los periódicos y revistas publican dicha información, que en algunos casos puede atribuirse con seguridad a la categoría de mitos y leyendas. Sin embargo, la autoridad perdida por los medios impresos fue inmediatamente retomada por los medios electrónicos. Y con el desarrollo de la red global, Internet migró a ella. Ahora puedes escuchar la frase “leí en Internet...” con más frecuencia que “estuve en la biblioteca...”. Conozco personalmente a personas, generalmente de la generación anterior, que creen incondicionalmente todo lo que "dice" la computadora. Esto es ampliamente utilizado por comerciantes sin escrúpulos. Hasta hace poco, en el mismo centro de Moscú, uno podía encontrarse con un hombre de negocios con una computadora portátil que, por una cierta cantidad, "pidió" un pronóstico astrológico de la computadora o algo por el estilo. Y entregó pronósticos impresos allí mismo. Y si miras comerciales, que están dando vueltas en la televisión, es difícil no darse cuenta de que en cada segundo de ellos el ordenador juega el papel de asesor en el uso de tal o cual cosa. La imagen de un hombre con bata blanca, presionando un botón en una computadora con algunos gráficos en la pantalla, vaga de video en video.
Esta fe de la gente en la infalibilidad de la máquina informática también se basa en un miedo interior a lo incomprensible. Después de todo, todo lo que hace una computadora está oculto a miradas indiscretas en algún lugar profundo de los tejidos oscuros de arneses de cables y arañas de microchip con inscripciones incomprensibles. Y solo aparecen inscripciones, consejos, recetas preparadas para todas las ocasiones en la pantalla. La gente tiene miedo de su malentendido, todo esto diseño complejo y por lo tanto creer en su infalibilidad.
Recientemente, el problema de no comprender el verdadero valor de las cosas y las verdaderas consecuencias de las propias acciones se ha manifestado plenamente. Y los programas de computadora, junto con películas de baja calidad que ni siquiera pueden llamarse artísticas, hacen su propia contribución a este problema. La influencia del “gurú electrónico” en las frágiles almas de los adolescentes es especialmente fuerte. Un gran número de programas informáticos promueven la violencia. Los juegos donde los adolescentes controlan una cruenta batalla se trasladan cada vez más a la realidad. Un adolescente todavía no puede entender que en un juego de computadora puedes patear a tu oponente con un golpe sin ninguna consecuencia, pero una acción trasladada a la vida real también puede conducir a la tragedia. Los adolescentes no entienden las consecuencias reales de sus acciones, son trasladados a un mundo virtual donde todo no es real, adquieren experiencia que no se puede aplicar en la práctica, forman una comprensión distorsionada del mundo que les rodea. Y la ejecución más realista " la realidad virtual”, más difícil es volver al mundo real, con sus problemas reales y sus leyes objetivas, no invertidas por la tecnología electrónica. Entre los adolescentes, existe el término "pasar el rato", que también se aplica a los jugadores de juegos de computadora. En este contexto, significa que una persona está tan inmersa en el mundo "virtual" que deja de sentir la realidad objetiva y no puede separarse del monitor hasta que "pasa" todo el juego hasta el final.
Este estado es similar a la embriaguez en los adultos. El sentimiento es el mismo. Una persona se sumerge en un mundo de fantasía surrealista y es bastante difícil sacarlo de allí.
A menudo, una persona pierde la comprensión de los valores verdaderos y deja de percibir adecuadamente la realidad circundante en relación con esto. Un ejemplo de tal pérdida de valores son los llamados "tamagotchi", animales electrónicos que se han generalizado en la actualidad. "Tamagotchi" es un pequeño llavero electrónico con una pantalla y varios botones a través del cual puede controlar el programa integrado en este dispositivo. El programa está hecho de acuerdo con un algoritmo tal que durante su funcionamiento parece que este dispositivo está vivo. Necesita ser "alimentado" electrónicamente, jugado con él, "curado", etc. en secuencia correcta“Tamagotchi” es “creciente” y “feliz”, si la secuencia es incorrecta, puede “enfermarse” o “morir”. Así, el programa no detiene su trabajo ni de día ni de noche, dando la impresión de que el “tamagotchi” está vivo. Los adultos con puntos de vista ya establecidos entienden que esto no es más que un juguete electrónico, pero los niños aún no pueden distinguir los seres vivos de un modelo electrónico. Viene de experiencia de vida. Después de todo, se sabe que durante el desarrollo de un niño hay un período de espiritualización de las cosas inanimadas, que pasa con la edad. Pero tal juguete electrónico se "comporta" como uno vivo, lo que dificulta que un niño evalúe correctamente su espiritualidad. Hay un caso conocido en el que un niño golpeó a su hermano menor porque "mató" a un Tamagotchi, y esos casos no son aislados. Por lo tanto, inicialmente parecería una buena idea inculcar en un niño un sentido de preocupación por los demás, lo que eventualmente se convierte en una perspectiva sesgada y un cambio en los valores de la vida. En última instancia, no reemplazaría un ser vivo, que puedes cuidar y criar el amor por tu prójimo en los niños, con un sustituto electrónico.
El cuento de Ray Bradbury "The Veld" retrata vívidamente tal situación. Incluso antes de la invención de este tipo de juguetes electrónicos, un brillante escritor describió las consecuencias de sustituir los valores reales por un modelo electrónico. En esta pieza, los niños trataron brutalmente a sus padres solo porque "mataron" la imagen holográfica al apagar la pantalla. Aquí no insto a abandonar por completo las cosas y los programas electrónicos e ir a la Edad de Piedra, pero estas cosas deben abordarse con la suficiente seriedad para evitar los efectos nocivos de los programas en la frágil psique.
Curiosamente, los programas tienen un impacto directo no solo en los "consumidores" de productos electrónicos, sino también en los "fabricantes", es decir, programadores El programador se acostumbra a pensar en categorías de máquinas y las cambia a otras. Incluso apariencia se vuelve fácilmente reconocible. Si ve frente a usted a un hombre delgado, silencioso, con anteojos y con círculos de una noche de insomnio debajo de sus ojos, entonces con una alta probabilidad podemos suponer que se trata de un ávido científico informático.. Un programador, con una comunicación suficientemente larga con la máquina. , adquiere una mentalidad especial. Está acostumbrado a dar respuestas precisas a las preguntas, como lo hace cuando escribe programas. Se conoce una vieja historia de la categoría de las anécdotas. En la calle, un transeúnte le pregunta a otro: “¿Este autobús va a la estación?”. - "Sí", el transeúnte no sabía que su interlocutor era un programador, quien respondió con precisión a la pregunta, pero guardó silencio que antes de que el autobús llegue a la estación, primero llega a la final, hace un círculo y solo entonces va en la dirección correcta. Si un transeúnte hiciera la pregunta "¿Cómo llegar a la estación?" Y también aclarara que estaba interesado en la forma más óptima, recibiría una respuesta de que necesitaba cruzar la calle, tomar un número de autobús tal y tal y conducir dos paradas. Pero lo que parece ridículo en la vida ordinaria es simplemente necesario cuando se trata de una máquina electrónica. Necesita instrucciones precisas para realizar ciertas operaciones y la precisión con la que el programador puede formular algoritmo paso a paso acciones, depende de sus calificaciones. Curiosamente, los militares alcanzan ciertas alturas en la programación. Esto puede explicarse por el hecho de que a los militares se les enseña a dar órdenes precisas y manejar grandes grupos de personas, dividiendo estrictamente la autoridad y el trabajo entre los miembros del grupo. Esta técnica se puede extender fácilmente a los programas de computadora cuando es necesario describir con precisión el algoritmo de cada parte del programa, la interacción de sus diversas partes.
La vida del pensamiento electrónico (¿piensan las computadoras?).
En la creación de cualquier cosa, tarde o temprano llega un momento en que su creador “da la última pincelada”, cuando decide que ha hecho todo lo posible y es hora de enviar su obra a “ gran vida". Y a partir de ese momento, el programa comienza a vivir una vida independiente, independientemente de su creador. Aquí es donde surge un concepto como "inteligencia artificial", que está directamente relacionado con el concepto de "pensamiento" y "cerebro". Se sabe que una computadora electrónica a menudo se denomina "cerebro electrónico". Entonces, trazando una analogía entre el cerebro humano y sus pensamientos, podemos llamar al programa “pensamiento electrónico” del cerebro electrónico. Consideremos el concepto mismo de "cerebro" y si se puede aplicar a una computadora electrónica. Naturalmente, exteriormente el cerebro humano y la computadora no tienen nada en común, pero puedes encontrar similitudes en las actividades de estos objetos.
En las obras de Pavlov M.G. , Sechenova I.M. fue probado actividad refleja cerebro humano. En los humanos, la asimilación de formas de actividad históricamente establecidas ocurre en el proceso desarrollo individual persona. Por lo tanto, habilidades humanas especiales como el oído para el habla y la música, la capacidad para el pensamiento abstracto son funciones de estructuras cerebrales neurodinámicas que son relativamente estables. El proceso de la actividad mental de las personas está asociado con el desarrollo de formas de experiencia humana, su almacenamiento, transmisión y procesamiento.
Existe una analogía directa entre la actividad del cerebro humano y el funcionamiento de un programa informático electrónico. Su funcionamiento utiliza impulsos eléctricos que pasan a través de millones de transistores (similares a los impulsos que pasan a través de las neuronas). El cerebro humano es tan puro en el nacimiento de un niño como una computadora sin un programa. Al crecer, una persona adquiere conocimientos y la computadora, al recibir un programa más complejo, "se vuelve más inteligente". Los programas de computadora ya son superiores a los humanos en un juego tan abstracto como el ajedrez. Pueden realizar trabajos de rutina e intelectuales, incitando a una persona, por ejemplo, al diseñar algo, soluciones listas para usar, actuando como expertos. Pero, ¿se puede llamar pensar a este proceso? Después de todo, pensar es proceso activo reflejos del mundo objetivo en conceptos, juicios, teorías, etc. relacionados con la solución de ciertos problemas.
Hay ejemplo interesante de una serie de los llamados sistemas de autoaprendizaje. Estos sistemas, basados en prueba y error, reciben información sobre la decisión correcta y luego la utilizan para tomar una decisión en situaciones similares. El programa almacena en su memoria situaciones en las que ocurrieron errores y construye un algoritmo para acciones posteriores para que estas situaciones ocurran con la menor probabilidad. Además, estos sistemas se pueden construir sobre principios puramente mecánicos y leyes lógicas. Podemos decir que estos sistemas “conocen” el mundo, pero ¿pueden sacar conclusiones, inferencias o deducir teorías? Definitivamente no. Habiendo recibido algo de "experiencia", estos sistemas en la misma situación aceptarán solución correcta, pero si la situación difiere aunque sea ligeramente de aquella en la que han estado, esto pondrá al sistema en un callejón sin salida. Dichos sistemas no tienen la capacidad de abstraerse de una situación específica, no tienen la capacidad de analizar, y no importa cuán bueno sea un programa de computadora, solo elige una solución utilizando la lógica de un conjunto de situaciones incrustadas, y si la situación es no familiarizado con la computadora, esto conducirá a la falla.
Así, se puede decir con certeza que en esta etapa del desarrollo de las computadoras, los programas, y por ende las computadoras, no pueden pensar.
Problemas morales - éticos de la programación.
El término “virus informáticos” ha entrado con fuerza en nuestras vidas. Cualquier persona, al menos un poco familiarizada con las computadoras modernas, ha escuchado esta frase y alguien se ha encontrado directamente con sus efectos destructivos. Entonces, ¿qué son los "virus informáticos"? Estos son programas que, por sus acciones, interrumpen el funcionamiento de otros programas, destruyen datos e impiden que los usuarios de computadoras trabajen normalmente. Además, tales programas pueden copiarse a sí mismos de computadora a computadora para capturar nuevos territorios para sus "hechos sucios".
Si este es un programa escrito por una persona, entonces surge una pregunta razonable: ¿quién escribe tales programas? Tal persona debe tener algunas habilidades en el manejo de computadoras, especialmente en la escritura de programas. Debe tener acceso a la computadora. Debe tener una razón para propagar el virus. Sin duda, millones de personas tienen la habilidad suficiente para escribir un programa de virus de manera intencional o accidental. Cualquier estudiante de programación y muchos adolescentes experimentados pueden hacerlo.
Por supuesto, los programadores también pueden crear programas de virus. Pero valoran su trabajo y, antes de ponerse manos a la obra, intentarán encontrar una forma más fácil y menos arriesgada de lograr su objetivo. Ahora se ha aprobado una ley que prevé penas por daños intencionales a datos informáticos, hasta penales (artículo 273 del Código Penal). PERO programa de computadora es la encarnación de su creador, sus pensamientos y su mente. Por supuesto, si un terrorista o un espía de un estado vecino escribe un virus, ni siquiera la amenaza de un castigo penal lo detendrá, pero la mayoría de los virus, como ha demostrado la práctica, no están escritos por terroristas en el sentido completo de la palabra, sino por gentes que están obsesionadas por la gloria de Herostratus, bárbaros, que no buscan beneficio con sus acciones. Quieren demostrar su superioridad mental, demostrar que pueden hacer lo que otros no pueden hacer, y son bastante eficientes, pero, al mismo tiempo, se afanan en la ociosidad. Estas personas son las que rompen ventanas, incendian ascensores, vierten ácido sobre cuadros en museos. Están impulsados por un deseo conflictivo. Por un lado, quieren demostrar su superioridad sobre otras personas y, por otro lado, los impulsos bárbaros y puramente gamberros de hacer algo desagradable. Si esa persona tiene las habilidades necesarias, puede escribir un virus informático.
Aquí surge un problema bien conocido, si tomamos el ejemplo de Raskolnikov. El hacha no mata, el hombre sí. De manera similar, un virus informático hecho por humanos lleva la intención maliciosa del programador en su cuerpo.
La moralidad de la sociedad, o, en otras palabras, las normas de comportamiento generalmente aceptadas condenan el vandalismo y el vandalismo en cualquiera de sus manifestaciones, y la sociedad moderna también se refiere a los vándalos informáticos. Pero el hombre está tan dispuesto que tiene un anhelo de destrucción en lo más profundo de su alma. Y si un ciudadano se educa en una sociedad y los principios morales de esta sociedad han penetrado profundamente en su mente, él, antes de sentarse a compilar un programa de virus, pensará si hay una aplicación más interesante de su conocimiento y fuerza, ¿Es posible hacer algo que traerá alegría a otras personas y, en última instancia, a ti mismo? Solo esas personas son programadores de clase alta que luchan por la creación, no por la destrucción, y dedican toda su vida a esta noble causa.
Conclusión.
Los temas que se han considerado en este documento son lo suficientemente amplios como para revelarse completamente en una cantidad limitada. La programación, como ciencia muy joven, necesita visión filosófica, en un profundo estudio de su influencia sobre la personalidad humana y sobre la sociedad humana generalmente. Estos problemas pueden considerarse como parte de los problemas filosóficos asociados al progreso científico y tecnológico, pero cuestiones como la inteligencia artificial van mucho más allá. Mientras los programas no se consideren organismos vivos, una persona no enfrenta problemas morales como, por ejemplo, "matar" un organismo artificial. Estos y muchos más preguntas filosóficas que la revolución científica y tecnológica pone ante nosotros todavía requieren la reflexión filosófica, la atención cercana de los filósofos modernos.
Bibliografía
Cuestiones filosóficas de la cibernética M. SOTSEGIZ 1961 -392s.
Cibernética. Pensamiento. Vida M. Pensamiento 1964. - 511p.
Koretsky S. Inteligencia artificial- ¿mito o realidad? Hard'n'Soft #2 1999.
Sechenov I.M. Reflejos del cerebro. 1863.
Arte y progreso científico y tecnológico. M. 1973–461s.
Soloviov V. S. Filosofía del arte y crítica literaria. M Arte 1991 - 699s.
Vyzhletsov G.P. Estética en el sistema de conocimiento filosófico Universidad Estatal de Leningrado 1983
Hegel "Estética" en 4 volúmenes, Moscú, 1969
Krutova O. N. Moralidad: conciencia y conducta. Instituto de Filosofía M.Nauka 1986 –207p.
Pantsurina V.A. El mundo interior de la personalidad y el arte. Sverdlovsk 1990 -212p.
Combates F. Johnstone P. Krats M. Virus informático: problemas y previsión: Per. De inglés. - M. Mir, 1994.- 176s. enfermo.
Dostoievski FM Crimen y castigo. M. 1974. 542s.
Bodalev A.A. Psicología popular para padres. M.: Pedagogía, 1988 - 256 p.
Bradbury R. Sobre andanzas eternas y sobre la Tierra: -M.: Pravda, 1987.-656 p., il.
Nuestros programas modelan el mundo. Cualquiera que haya tomado en serio los postulados de la programación orientada a objetos se dará cuenta rápidamente de que el proceso de modelado en el marco de este método es fundamentalmente indeterminable. Vamos a discutir con más detalle.
De ahora en adelante, consideraré un ejemplo de libro común con empleados de una empresa, escribiremos algo similar a SI. Derivar la clase Empleado de la clase Persona es una gran idea, especialmente si almacena datos exclusivamente en la memoria: SQL tiene algunos problemas con la herencia de tablas, pero este no es el punto: OOP con sus ofertas de jerarquización, agregaciones, composiciones y herencias. forma perfecta organización de datos. Problemas con los métodos.
Detrás de cada método de lógica empresarial hay un hecho del mundo que este método (a menudo no solo) modela. Los hechos de programación son operaciones: los llamaremos así en lo que sigue. Al hacer que un método sea miembro de una clase, OOP requiere que vinculemos una operación a un objeto, lo cual es imposible porque una operación es una interacción de objetos (dos o más), excepto en el caso de una operación unaria, pura reflexión. El método PaySalary se puede atribuir a las clases Empleado (Empleado), Cajero (Efectivo), Cuenta bancaria (Cuenta), todas ellas son equivalentes en el derecho a poseerlo. El dilema de la ubicación del método acompaña todo el proceso de desarrollo: su difícil resolución puede ser crítica e incluso fatal.
En los libros de programación, los autores honestos admiten tímidamente que "los objetos no son realmente objetos", y OOP es solo una forma de organizar el código, no un mecanismo de modelado. Pero el punto central es que "el mundo es una colección de hechos, no de cosas", de ahí la incapacidad fundamental para construir un modelo adecuado, utilizando la programación orientada a objetos en la forma que requieren los escritores de libros de texto. Es importante entender que es posible modelar el mundo en código, pero los átomos del modelo deben ser hechos, no objetos.
Los estadounidenses han invertido bastante en el mundo y especialmente en la literatura en inglés. Es mejor decir que la llamada edad de oro de la ficción estadounidense es uno de los últimos giros en el desarrollo de la literatura mundial, si no el último.
En 2015, es posible que haya notado un cambio en la forma en que se desarrollan las aplicaciones de JavaScript. Los desarrolladores se están alejando de una arquitectura de estado mutable impredecible hacia una arquitectura de aplicación inmutable más predecible.
Con marcos como Backbone, era costumbre sincronizar los datos en sí y la presentación de los datos; para esto, tenía que suscribirse manualmente a los eventos dom necesarios. Este método era propenso a errores y forzaba el uso de demasiado código genérico. Angular apareció y lo arregló con un enlace bidireccional automatizado.
Pero ahora todo se está moviendo en una dirección diferente.
… pero es normal. Cualquier diseño apesta. Y siempre apestará.
Si no me crees, déjame explicarte...
Ningún proyecto sobrevive a la reunión con la implementación
Cuando comience a implementar lo que ha diseñado, inevitablemente encontrará cosas en la realidad que no coinciden con sus expectativas iniciales.
Es posible que falten (o no sean válidos) los datos que esperaba que se solicitaran en una respuesta de servicio externo. La unicidad esperada puede no ser única en absoluto en la práctica (incluso sha1 tiene colisiones en algún momento). Los procesos que se suponía que eran confiables fallarán con mucha más frecuencia de lo que esperaba.
Esto esta bien.
En algunos casos, simplemente puede agotar el tiempo de espera, lanzar una excepción o colapsar en voz alta de alguna otra manera. En otros casos, hay que relajar los requisitos del sistema. O agregue una capa de filtro adicional, que ya se dedicará a la "limpieza" y la transferencia opción correcta datos de entrada.
Los datos que faltan pueden hacerse opcionales o reemplazarse por defecto.
Los datos incorrectos se pueden tratar como faltantes, o puede escribirlos "tal cual" y agregar una versión validada adicional que solo está presente si el original es válido.
La restricción de unicidad puede
Incluso mientras leía, recordé a Edsger Dijkstra con su famosa frase: “Rezo todos los días para que más de mis compañeros programadores puedan encontrar los medios para liberarse de el curso de compatibilidad") de The Humble Programmer (1972 sic!!!). Y más tarde Eric Raymond con su Catedral y Bazar (1997). Pero el texto de Vinge no se trata solo de la maldición de la compatibilidad, en tres páginas se plantea toda una capa de preguntas (y generalmente quedan sin respuesta):
- El problema de la compatibilidad en un sentido amplio;
- El problema de mantener el código antiguo;
- El problema de la dependencia de la vida humana "de robots insensibles" (c), al que nos estamos acercando rápidamente;
- El problema de la minería de datos en general y la búsqueda de una solución lista para usar en un barril sin fondo de recetas en particular (github, stack overflow?);
- El problema de "reescribir" el código anterior (tanto malo como bueno): este momento te da ganas de volver a leerlo :);
- El problema de la inmensidad de las tecnologías de la información. A veces se dice que el último físico universal vivió a mediados del siglo pasado, es decir, Lev Landau. Parece que llega (o ya ha llegado) el momento en que ya no es posible encontrar un programador universal;
- El texto no contiene la palabra hacker, ni en connotación positiva ni negativa. Pero también se escribe sobre investigadores, y sobre los beneficios que se pueden obtener conociendo estas o aquellas puertas traseras y sobre el poder que esto puede dar.
- Y tal vez eso no es todo... :)
Uno tiene la impresión de que esto fue escrito por una persona que sintió estos mismos problemas en su propia piel.
Me gustaría señalar que Depth in the Sky se escribió en 1999, cuando gran parte de lo que escribe Vinge aún no era un problema, o simplemente aparecía en el horizonte.
Como crítica, me gustaría señalar que Vinge pasó por alto a la IA (tanto fuerte como débil, generalmente pasó, incluso no tocó las redes neuronales) y redujo las ventajas de la TI al rendimiento. Además, la presencia de las megacorporaciones no se siente en el texto (aunque, por supuesto, "Deep in the Sky" no se aplica al cyberpunk), a excepción de Qeng-Ho como tal. No hay guerras de patentes, el tema de los derechos de autor y el problema de los desarrollos propietarios cerrados, cuyos códigos fuente no han sido publicados, no se han tocado.
No sobre programación, sino sobre estándares.
Más adelante en el mismo capítulo, se tocará el tema más interesante de la transmisión galáctica para distribuir sus propias tecnologías. ¿Para qué? Estandarización. La difusión de su propio idioma y sus propios estándares y tecnologías, lo que, por un lado, llevará a las civilizaciones atrasadas a un nivel aceptable para el comercio y, por otro lado, reducirá el costo de la comunicación y asegurará la compatibilidad y, como resultado , facilitar el comercio y aumentar la marginalidad. Me pregunto si Vinge sabía al momento de escribir el libro sobre la estandarización del equipamiento de los barcos de la flota inglesa durante las Grandes Conquistas, lo que permitió reducir el costo de las reparaciones y el mantenimiento. ¿Qué pasa con la difusión del inglés como lengua comercial, científica, etc.? Los ingleses enseñaron (¿obligaron a enseñar?) a los nativos locales a su idioma. Los españoles y los franceses hicieron lo mismo. Y ahora el inglés, el español, el francés y el portugués están muy extendidos. Pero los holandeses creían que los nativos no necesitan que se les enseñe su idioma. ¿Hay muchos lugares en el mundo donde se habla holandés además de Holanda?
Ahora, la enseñanza del inglés está de moda en todo el mundo. Uso de metodologías y libros de texto estandarizados, exámenes estandarizados y escalas de calificación. ¿Es solo negocio privado?
A continuación se muestra el pasaje más interesante del texto. Hay muchas otras cosas interesantes en la novela que no tienen nada que ver con la programación, no en vano recogió varios premios. Así que recomiendo leerlo, y en el original, la traducción que me llegó no es muy buena.
Feliz lectura :)
A nadie le importa mi código. Me sorprendió cuando me di cuenta de esto mientras trabajaba como programador. Pasé mucho tiempo perfeccionando mi código hasta que me di cuenta de que nadie estaba interesado en él, porque no es el código en sí lo que cuenta, sino el producto. La aceptación por parte del programador de este hecho conducirá a una mayor productividad y valor de su trabajo.
La diferencia entre un producto y un proyecto es que cuando se desarrolla un producto, hay un plan, y cuando se desarrolla un proyecto, hay una investigación. Si tiene algún problema sin resolver, digamos que aún no ha decidido qué base de datos usar en su proyecto, entonces deberá estudiar este tema, es decir, investigar. Esto se llama investigación tecnológica. Investigar, no es necesario en absoluto, algo completamente nuevo a escala global, si estás construyendo un puente, entonces necesitas explorar el suelo en este lugar en particular, y hasta que se explore este suelo, el puente, como producto, aún no existe, hasta ahora es - proyecto. Todavía no se sabe qué tipo de suelo, lo que significa que no se sabe de qué hacer el puente, cómo fortalecerlo, es imposible calcular el presupuesto y planificar el cronograma de trabajo.
Quien sabe copiar, sabe HACER. Leonardo da Vinci lo dijo. Verá, procede de sus ideas sobre lo que son XP, Windows, sistemas operativos. Cómo habla la gente:
Todavía era joven, tenía XP, esos eran los días dorados, pero ahora no es como ahora. Nuevos tiempos, software moderno. No entiendo, ¿por qué cavar en basura? Al menos harías un clon del décimo Windows, pero con tu velocidad, lo harás en 100 años.
Pero el hecho de que la gente copie software antiguo no significa que sea retrógrada o necrófila. Primero, lo hacen ahora, estando en condiciones modernas conociendo todas las tendencias y direcciones. En segundo lugar, la obsolescencia del software en general es algo extremadamente contrario a la intuición. Por ejemplo, en las aplicaciones más modernas hay fragmentos de código escritos hace más de veinte años y, ojo, nadie los va a reescribir. Esto es información, no se desgasta, como se desgasta el metal o la madera. Pero la gente tiende a traducir su percepción cotidiana en cosas que son intangibles y requieren una mirada completamente diferente. ¿Lo entiendes? Información. No es una cosa. Comparar con los poemas de Pushkin.
¿Vale la pena aprender a programar?
“Programación” es un concepto muy amplio. Algunos lenguajes de programación son mucho más fáciles que otros. Algunos idiomas requieren una comprensión de cómo el programa "habla" a la computadora. La parte más importante de aprender códigos es mantener la mentalidad correcta. El punto no es decirse a sí mismo "Puedo hacer esto" o leer la literatura necesaria ...
La conclusión es la siguiente…
¿Aprender o no aprender a programar?
La alfabetización en cualquier lenguaje informático, desde el simple HTML hasta el complejo C++, requiere dedicación no solo a la tecnología, sino también a sus cambios interminables. HTML5 termina con un número por una razón. Cuándo suficiente los navegadores web comenzarán a ser compatibles con HTML6, los desarrolladores tendrán que aprender algo nuevo nuevamente.
Posibles razones por las que le gustaría involucrarse en nuevo proceso aprendiendo:
- Gana confianza: Tuve varios clientes que pensaban que si dominaban un lenguaje de programación, entonces las computadoras les asustarían menos.
- Necesidad: los problemas técnicos pueden surgir en cualquier momento.
- Emoción: algunas personas solo quieren aprender nuevas habilidades.
- Para entender lo que es posible: cuando un desarrollador dice: "¡Es imposible de hacer!" ¿Quiere decir que esto realmente no es posible, o simplemente no quiere asumir este dolor de cabeza?
siempre se curioso
Nadie quiere ser un insecto en su parabrisas. En cuanto a mí, no es el miedo al fracaso lo que asusta a la gente, sino el miedo a la posibilidad de perderse. La desesperanza abrumadora fomenta sentimientos de inferioridad. El valor y la perseverancia no son un antídoto contra el agobio, pero un alto a tiempo, antes de que este sentimiento se haya apoderado de ti, será la mejor medicina.
Tengo tres enfoques para resolver un problema con cualquier proyecto:
- Encuentra un tema que te moleste
El tiempo y el pago son todos buenos. Pero nada te dará más ímpetu que un picor que no se puede alcanzar. En un futuro prometedor, la programación no debería ser un fin en sí misma. Debería servir como su "grasa para puertas chirriantes".
- Deberías ser recompensado por el esfuerzo extra.
Habiendo encontrado la picazón proverbial, las personas que estudian programación también deberían encontrar alivio. Sin tutoriales, sin herramientas, sin elogios, nadie ayudará a convertirse en un maestro de CODE. Solo después de las palabras "Escribí esto y ... ¡mira lo que hice!" sentirás que has superado el obstáculo. Sonará tonto hasta que lo pruebe usted mismo. El código probado que funciona te dará un subidón de adrenalina y te hará sentir como si te hubieras convertido en un maestro de la programación informática.
- Su proyecto debe realizarse mientras su cerebro tiene apetito.
Entrena tu cerebro. Al cargar, los entrenadores alientan a las personas a esforzarse un poco más de su límite. Aprender es hambre. Tu cerebro siempre tiene apetito por nuevos conocimientos.
Practica diariamente
La única forma de aprender a programar y recordarlo para siempre es practicar todos los días. Al igual que con el aprendizaje de cualquier habilidad nueva, un horario de trabajo constante con nuevas metas y objetivos pulirá gradualmente sus habilidades hasta el límite.
Dmitri Yakushev
"Filosofía"
Programación en C++
segunda edición, ampliada y corregida
CDU 004.43 BBK 32.973.202
Yakushev D. M.
Ya49 "Filosofía" de la programación en C++. / D. M. Yakushev. - 2ª ed. - M.: Prensa Buk, 2006. - 320 p.
ISBN 5 9643 0028 6
El autor del lenguaje C++ es Bjarne Stroustrup, empleado de la conocida empresa AT&T. C++ (o mejor dicho, su antecesor, C con clases) fue creado bajo la influencia del lenguaje Simula (debo decir que este lenguaje de programación apareció allá por 1967). De hecho, cuando apareció C++, C ya se había ganado su popularidad; es venerado por los programadores profesionales por poder aprovechar una arquitectura particular al crear programas en un lenguaje que es relativamente nivel alto.
C++ es uno de los lenguajes de programación más populares (si no el más popular) en la actualidad. Es C++ el que le permite escribir un programa utilizando enfoques orientados a objetos (y los programas que lo requieren suelen ser muy grandes) y al mismo tiempo lo suficientemente "rápidos".
Este libro presentará al lector la "filosofía" y los fundamentos de la programación en C++. El libro contiene muchos ejemplos compilados y verificados por el autor.
CDU 004.43 BBK 32.973.202
Parte 1.
Capítulo 1. C++ es un lenguaje de programación de propósito general. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Capítulo 2. Vocabulario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Capítulo 3. Sintaxis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Capítulo 4. Alcance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Capítulo 5. Definiciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Capítulo 6. Diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Capítulo 7. Clases de memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Capítulo 8. Tipos básicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Capítulo 9. Tipos derivados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Capítulo 10. Objetos y LVALUE (direcciones) . . . . . . . . . . . . . . . . . . . . . . . . .15 Capítulo 11. Símbolos y números enteros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Capítulo 12. Transformaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Capítulo 13. Expresiones y operaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Capítulo 14. Descripciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Capítulo 15. Especificadores de clase de almacenamiento. . . . . . . . . . . . . . . . . . . . . .31 Capítulo 16. Descriptores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Capítulo 17. Descripciones de clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 Capítulo 18. Inicialización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 Capítulo 19. Nombres de funciones sobrecargados. . . . . . . . . . . . . . . . . . . . .58 Capítulo 20. Descripción de la enumeración. . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Capítulo 21. Descripción Asm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 Capítulo 22. Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 Capítulo 23. Definiciones externas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
Capítulo 24 Líneas de comandos del compilador . . . . . . . . . . . . . . . . . . . .68 Capítulo 25. Resumen de tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Capítulo 26. Consideraciones de movilidad. . . . . . . . . . . . . . . . . . . . . . . . . .75 Capítulo 27. Memoria libre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Parte 2. Turbo C++
Capítulo 1. Entorno de desarrollo integrado. . . . . . . . . . . . . . . . . . . .78 Capítulo 2. Barra de menús y menús. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Capítulo 3. Ventanas TURBO C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Capítulo 4. Trabajar con menú OSD. . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Capítulo 5. Estructura de archivos, tipos de datos y operadores de E/S. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Capítulo 6. Operaciones aritméticas, lógicas y de relación y asignación. . . . . . . . . . . . . . . . . . . . . . .91
Capítulo 7. La organización lógica del programa y el uso más simple de funciones. . . . . . . . . . . . . . . . . . . . . . . . . .95
Capítulo 8. Organización lógica de un programa simple. . . . . . . . . . .95 Capítulo 9. Uso de constantes de varios tipos. . . . . . . . . . . . .96 Capítulo 10. Estructuras de control. . . . . . . . . . . . . . . . . . . . . . . . . . . .98
Capítulo 11
cuando se trabaja con arreglos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .cien
Parte 3. De la teoría a la práctica
Capítulo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 Capítulo 2. Puerto STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 Capítulo 3. Lenguaje de programación de Microsoft: C# . . . . . . . . . . . . . .106 Capítulo 4. Generador de C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 Capítulo 5. Uso de punteros "inteligentes". . . . . . . . . . . . . . . . . . . . . .111 Capítulo 6. Razonamiento sobre punteros "inteligentes". . . . . . . . . . . . . .116 Capítulo 7. Destructores virtuales. . . . . . . . . . . . . . . . . . . . . . . . . . . .122 Capítulo 8. Escritura de estructuras de datos en archivos binarios. . . . . . . . . . . .126
Capítulo 9 . . . . . . . . . . . . . . . . .132 Capítulo 10. Constructor virtual. . . . . . . . . . . . . . . . . . . . . . . . . . .136 Capítulo 11. Lectura de textos fuente. . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Capítulo 12. La función gets() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Capítulo 13. Propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 Capítulo 14. Comentarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 Capítulo 15. Programación web. . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Capítulo 16. Errores en el trabajo con memoria. . . . . . . . . . . . . . . . . . . . . . . . . .158 Capítulo 17. Creación de gráficos con ploticus . . . . . . . . . . . . . . .161 Capítulo 18. Automatización y motorización de aplicaciones. . . . . . . . . . .164 Capítulo 19. Descripción general de los compiladores C/C++ EMX y Watcom . . . . . . . . . .183 Capítulo 20. Uso de la directiva #import. . . . . . . . . . . . . . . . . . .188
capitulo 21
Windows en Borland C++Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Preguntas y respuestas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
Publicación científica y popular
Yakushev Dmitri Mijáilovich
"FILOSOFÍA" DE LA PROGRAMACIÓN C++
Editor en jefe B. K. Leontiev
Editor jefe A. G. Benetashvili
Diseño original de I. V. Tsarik
Artista O. K. Alekhin
Editor de arte M. L. Mishin Editor técnicoK. V.Shapiro
Correctores L. S. Zimina, K. V. Tolkacheva
Firmado para su publicación el 05/07/2006. Formato 60x90/16. Auriculares "Newton". Papel compensado. Impresión offset. Pech. yo 20. Circulación 3000.
Introducción al lenguaje de programación C++ | ||
Parte 1. Introducción al idioma
programacion c++
C++ - lenguaje de programación de propósito general
El autor del lenguaje C++ es Bjorn Stroustrup, empleado de la conocida empresa AT&T. C++ (más precisamente, su antecesor, C con clases) fue creado bajo la influencia de Simula (hay que decir que este lenguaje de programación apareció allá por 1967). En realidad, para ese momento (cuando apareció C ++), C ya se había ganado la popularidad; por lo general, es muy respetado por ser capaz de explotar las características de una arquitectura particular sin dejar de usar un lenguaje de nivel relativamente alto. Es cierto que, por lo general, es precisamente por esto que no les gusta. Por supuesto, esto perdió (o distorsionó) algunos de los principios de la construcción de programas; por ejemplo, en C, prácticamente no existe la posibilidad de crear programas modulares. No, por supuesto que se crean, pero con la ayuda de algunas "muletas" en forma de usar directivas de preprocesador, no existe tal modularidad como, por ejemplo, en Modula 2 o Ada, en C. Por cierto, este todavía no es el caso en C++.
Desde el principio, se enfatizó que C++ es un desarrollo del lenguaje C, quizás parte de su dialecto. Esto se evidencia por el hecho de que el primer compilador (todavía en existencia) fue cfront, que hizo el trabajo de traducir la fuente de C++ a la fuente de C. Esta opinión todavía existe y, debo decir, todavía no es infundada; sin embargo, C y C++ - idiomas diferentes programación.
La principal diferencia entre C++, cuando apareció por primera vez, fue su soporte explícito para un enfoque de programación orientado a objetos. Debe comprender que puede programar usando OOP y OOA en cualquier lugar, incluso si el conjunto de herramientas no lo admite explícitamente; como ejemplo, puede tomar la biblioteca de interfaz de usuario
Introducción al lenguaje de programación C++ |
||
face GTK+, que está escrito en C "puro" y utiliza los principios del "diseño" orientado a objetos. La introducción de herramientas para soportar OOP en el lenguaje de programación significa que en la etapa de compilación (y no en la etapa de ejecución del programa) se verificará la compatibilidad de tipos, la presencia de métodos, etc. En principio, es bastante conveniente.
De nuevo, así como C no es un lenguaje de programación puro de alto nivel (porque te permite hacer demasiados trucos), C++ no es, estrictamente hablando, un lenguaje de programación orientado a objetos. Esto se ve obstaculizado por características tales como la presencia de funciones virtuales (porque cuando se habla de polimorfismo, nadie estipula que algunos métodos participarán en él y otros no), la presencia de la función principal () hasta ahora, etc. . Además, no hay entidades en C++, como metaclases (aunque probablemente no sean muy necesarias) e interfaces (en su lugar se usa la herencia múltiple). Sin embargo, C++ es actualmente uno de los lenguajes de programación más populares (si no el más popular). ¿Por qué? Sí, porque todas estas "fealdades" le permiten eventualmente escribir un programa utilizando enfoques orientados a objetos (y los programas que requieren esto suelen ser muy grandes) y al mismo tiempo bastante "rápidos". Esto se ve facilitado precisamente por la presencia de funciones virtuales (es decir, lo que el propio programador comparte en el momento del diseño, donde necesita polimorfismo, y donde será suficiente combinar algunas funciones en un grupo de acuerdo con algún atributo), la presencia obligatoria de un optimizador, etc. Todo esto permite, con el uso adecuado, escribir un programa que funcione. Es cierto que a menudo hay ejemplos de uso analfabeto, como resultado de lo cual la elección de C ++ para la implementación del proyecto se convierte en una tortura para los programadores y la administración.
Actualmente, existe un estándar para el lenguaje de programación C++, que incluye, entre otras cosas, la biblioteca de plantillas estándar. Hay una discusión especial sobre las plantillas, formalmente también son "muletas" para hacer, por así decirlo, polimorfismo en la etapa de compilación (y como tales son muy útiles), pero la biblioteca
Sin duda, una innovación correcta por todos los lados. Finalmente, tener formas estándar de ordenar una lista de manera portátil (es decir, de compilador a compilador) (aparte de escribir todas las subrutinas y estructuras de datos relevantes) facilitó mucho la vida del programador. Es cierto que todavía hay mucha gente que tiene una mala idea de cómo funciona STL y cómo usarlo (a excepción de std::cin y std::cout).
Introducción al lenguaje de programación C++ | ||
Un hito importante en el desarrollo de la programación fue la creación y el uso generalizado del lenguaje C++. Este lenguaje, habiendo retenido los medios del lenguaje C (lenguaje orientado a procedimientos), que se ha convertido en un estándar generalmente reconocido para escribir sistemas y programas de aplicación, se introdujo en
la práctica de programar la posibilidad de un nuevo enfoque tecnológico para el desarrollo de software, llamado "programación orientada a objetos".
El lenguaje de programación C++ es C* ampliado con la introducción de clases, funciones en línea, operadores sobrecargados, nombres de funciones sobrecargados, tipos constantes, referencias, operaciones de administración de memoria libre, verificación de parámetros de funciones.
La introducción de un paradigma orientado a objetos en la práctica de escribir programas conduce al desarrollo de nuevas áreas de la informática, un aumento significativo en el nivel de fabricación de las herramientas de software creadas, una reducción en el costo de desarrollo y mantenimiento de programas, su reutilización y participación en el proceso de expansión de las capacidades intelectuales de las computadoras.
El enfoque de objeto del modelado de información de áreas temáticas se utiliza cada vez con más éxito como base para estructurar sus reflexiones de información y, en particular, las bases de conocimiento.
C++ es un lenguaje de programación de propósito general. Este lenguaje es bien conocido por su eficiencia, economía y portabilidad.
Estas ventajas de C++ proporcionan buena calidad desarrollo de casi cualquier tipo de producto de software.
El uso de C ++ como lenguaje de herramientas le permite obtener programas rápidos y compactos. En muchos casos, los programas escritos en C++ son comparables en velocidad a los programas escritos en lenguaje ensamblador.
Aquí hay algunas características esenciales del lenguaje C++:
C++ proporciona un conjunto completo de operadores de programación estructurados;
C++ ofrece un conjunto inusualmente grande de operaciones;
Introducción al lenguaje de programación C++ |
||
Una variedad de operaciones le permite elegir sus diferentes conjuntos para minimizar el código resultante;
C++ admite punteros a variables y funciones;
Un puntero a un objeto de programa corresponde a la dirección de máquina de ese objeto;
A través del uso juicioso de punteros, uno puede crear programas que se ejecuten eficientemente, como los punteros le permiten referirse a objetos de la misma manera que lo hace una computadora;
C ++ admite la aritmética de punteros y, por lo tanto, permite el acceso directo y la manipulación de direcciones de memoria.
Capítulo 2. Vocabulario
Hay seis clases de tokens: identificadores, palabras clave, constantes, cadenas, operadores y otros delimitadores. Los caracteres de espacio, tabulación y nueva línea, así como los comentarios (colectivamente, "espacios en blanco"), como se describe a continuación, se ignoran, excepto cuando sirven como separadores de tokens.
Se necesita algún espacio en blanco para separar los identificadores, palabras clave y constantes que de otro modo serían conmovedoras. Si el flujo de entrada se analiza en tokens hasta un carácter determinado, se supone que el siguiente token contiene la cadena de caracteres más larga que puede formar el token.
Comentarios
Los caracteres /* inician un comentario que termina con los caracteres */. Los comentarios no se pueden anidar.
Los caracteres // comienzan un comentario que termina al final de la línea en la que aparecen.
Identificadores (nombres)
Muchas operaciones de C++ corresponden a instrucciones de máquina y, por lo tanto, permiten la traducción directa a código de máquina;
Identificador: una secuencia de letras y números de longitud arbitraria; el primer carácter debe ser una letra; el guión bajo "_" cuenta como una letra; Las letras mayúsculas y minúsculas son diferentes.
Los identificadores volátiles y firmados están reservados para uso futuro.
constantes
Hay varios tipos de constantes. Lo siguiente es resumen características del hardware que afectan a su tamaño.
constantes enteras
Una constante entera que consta de una secuencia de dígitos se considera octal si comienza con 0 (dígito cero) y decimal en caso contrario. Los dígitos 8 y 9 no son dígitos octales.
Una secuencia de dígitos precedidos por 0x o 0X se trata como un entero hexadecimal.
Los dígitos hexadecimales incluyen letras desde a o A hasta f o F, que tienen valores de 10 a 15.
Una constante decimal cuyo valor es mayor que el entero de máquina con signo más grande se considera larga; constante octal y hexadecimal cuyo valor es mayor que el mayor
Introducción al lenguaje de programación C++ | ||
cuello entero de máquina con signo, considerado largo; de lo contrario, las constantes enteras se consideran int.
Constantes largas dadas explícitamente
Una constante decimal, octal o hexadecimal seguida inmediatamente por l (letra latina "el") o L se considera una constante larga.
constantes simbólicas
Una constante de carácter consta de un carácter encerrado entre comillas simples (apóstrofes), como "x" . El valor de una constante de carácter es el valor numérico del carácter en el conjunto de caracteres de la máquina (alfabeto).
Las constantes de caracteres se consideran datos de tipo int. Algunos caracteres no gráficos, la comilla simple " y la barra invertida \ , se pueden representar de acuerdo con la siguiente lista de secuencias de escape:
carácter de nueva línea NL (LF) | ||
lengüeta horizontal NT | ||
pestaña vertical VT | ||
volver al paso BS | ||
retorno de carro CR | ||
traducción de formato FF | ||
barra invertida \ | ||
comilla simple (apóstrofe) " | ||
conjunto de bits 0ddd | ||
conjunto de bits 0xddd |
La secuencia de escape \ddd consta de una barra invertida seguida de 1, 2 o 3 dígitos octales que especifican el valor del carácter deseado. Un caso especial de esta construcción es \0 (no sigue ningún dígito), que especifica el carácter nulo.
La secuencia de escape \xddd consta de una barra invertida seguida de 1, 2 o 3 dígitos hexadecimales que especifican el valor del carácter deseado. Si el carácter que sigue a la barra invertida no es uno de los caracteres enumerados, se ignora la barra invertida.
Introducción al lenguaje de programación C++ |
||
Constantes de punto flotante
Una constante de punto flotante consta de una parte entera, un punto decimal, una mantisa, e o E, y un exponente entero (opcionalmente, pero no necesariamente con signo). La parte entera y la mantisa consisten en una secuencia de dígitos. Se puede omitir la parte entera o la mantisa (pero no ambas); o se puede omitir el punto decimal, o (E) junto con el exponente completo (pero no ambas partes al mismo tiempo). La constante de punto flotante es de tipo double.
Constantes enumeradas
Los nombres declarados como enumeradores son constantes de tipo
en int.
constantes descritas
Se puede definir un objeto de cualquier tipo para que tenga un valor constante en todo el ámbito de su nombre. En el caso de los punteros, se usa el declarador *const para lograr esto; para objetos que no son punteros, se usa el descriptor const.
Una cadena es una secuencia de caracteres entre comillas dobles: "..." . La cadena tiene una matriz de tipos de caracteres y una clase de almacenamiento estática, se inicializa con los caracteres dados.
El compilador coloca un byte nulo (vacío) \0 al final de cada línea para que el programa que escanea la línea pueda encontrar el final de la línea.
En una cadena, el carácter de comillas dobles " siempre debe estar precedido por \ ; además, se pueden usar las mismas secuencias de escape que se describen para las constantes de caracteres.
Y finalmente, el carácter de nueva línea solo puede aparecer inmediatamente después de \ ; entonces se ignoran tanto -\ como el carácter de nueva línea.
Capítulo 3 Sintaxis
Entrada de sintaxis
De acuerdo con las reglas sintácticas de notación, las categorías sintácticas están en cursiva y las palabras y caracteres literales están en fuente de ancho constante.
Introducción al lenguaje de programación C++ | ||
Las categorías alternativas se escriben en líneas diferentes. Un carácter terminal o no terminal opcional se denota mediante el subíndice "opt", de modo que (opt expresión) indica que la expresión entre llaves es opcional.
Nombres y tipos
Un nombre denota (denota) un objeto, función, tipo, valor o etiqueta. El nombre se introduce en la descripción del programa. Un nombre solo se puede usar dentro de una región del texto del programa, llamada su alcance. El nombre tiene un tipo que determina su uso.
Un objeto es una región de la memoria. Un objeto tiene una clase de almacenamiento que define su vida útil. El significado de un valor encontrado en un objeto está determinado por el tipo de nombre utilizado para acceder a él.
Zona de visibilidad
Hay cuatro tipos de ámbitos: local, archivo, programa y clase.
Local
Un nombre declarado en un bloque es local para ese bloque y solo puede usarse en ese bloque después del lugar de declaración y en bloques adjuntos.
La excepción son las etiquetas, que se pueden usar en cualquier parte de la función en la que se describen. Los nombres de los parámetros de funciones formales se tratan como si estuvieran declarados.
en él mismo unidad exterior esta función.
Un nombre declarado fuera de cualquier bloque o clase puede ser utilizado en el archivo donde se declara después del lugar de declaración.
El nombre de un miembro de clase es local para su clase y solo se puede usar en una función miembro de esa clase, después de que se haya aplicado una operación a un objeto de su clase, o después de que se haya aplicado una operación > a un puntero a un objeto de su clase.
También se puede hacer referencia a los miembros de la clase estática y las funciones de los miembros mediante el operador :: donde su nombre de clase está en el alcance.
Introducción al lenguaje de programación C++ |
||
Una clase declarada dentro de una clase no se considera miembro y su nombre pertenece al ámbito adjunto.
Un nombre se puede ocultar describiendo explícitamente el mismo nombre en un bloque o clase. Un nombre en un bloque o clase solo puede ser oscurecido por el nombre declarado en el bloque o clase que lo encierra.
También se puede usar un nombre no local oculto cuando el operador :: especifica su alcance.
Un nombre de clase oculto por un nombre que no es un nombre de tipo todavía se puede usar si está precedido por class, struct o union. Un nombre de enumeración enum oculto por un nombre que no es un nombre de tipo aún se puede usar si está precedido por enum .
Capítulo 5. Definiciones
Una declaración es una definición excepto cuando describe funciones sin especificar un cuerpo de función, cuando contiene un especificador extern(1) y no tiene inicializador o cuerpo de función, o cuando es una declaración de clase.
Capítulo 6 Disposición
Un nombre de ámbito de archivo no declarado explícitamente como estático es común a todos los archivos en un programa de varios archivos. Este es también el nombre de la función. Tales nombres se dice que son externos.
Cada declaración de un nombre externo en un programa se refiere al mismo objeto, función, clase, enumeración o valor de enumeración.
Los tipos especificados en todas las declaraciones de nombres externos deben ser idénticos. Puede haber más de una definición de tipo, enumeración, función en línea o const no compuesto, siempre que las definiciones sean idénticas, aparezcan en archivos diferentes y todos los inicializadores sean expresiones constantes.
Introducción al lenguaje de programación C++ | ||
En todos los demás casos, debe haber exactamente una definición para un nombre externo en un programa.
Una implementación puede requerir que una const compuesta usada donde no se encuentra una definición de const debe ser declarada explícitamente por extern y tener exactamente una definición en el programa. La misma restricción se puede imponer a las funciones en línea.
Capítulo 7
Hay dos clases de memoria descritas:
auto
estático.
Los objetos automáticos son locales para cada llamada de bloque y se restablecen cuando el bloque sale.
Los objetos estáticos existen y conservan su valor durante todo el programa.
Algunos objetos no tienen nombre y sus tiempos de vida están controlados explícitamente por los operadores nuevo y eliminar.
Capítulo 8
Los objetos declarados como caracteres (char) son suficientes para almacenar cualquier elemento del juego de caracteres de la máquina, y si un carácter que pertenece a ese juego se almacena en una variable de carácter, entonces su valor es igual al código entero de ese carácter.
Actualmente hay tres tamaños de enteros, descritos como int corto, int y int largo. Los enteros más largos (long int) no proporcionan menos almacenamiento que los enteros más cortos (short int), pero tras la implementación, ya sea long o short, o ambos, pueden volverse equivalentes a un entero normal.
Los enteros "ordinarios" tienen un tamaño natural dado por la arquitectura de la máquina central; se fabrican otras dimensiones para satisfacer necesidades especiales.
Introducción al lenguaje de programación C++ |
||
Cada enumeración es un conjunto de constantes con nombre. Las propiedades de enum son idénticas a las de int. Los enteros sin signo descritos como sin signo obedecen las reglas de la aritmética módulo 2n, donde n es el número de bits en su representación.
Los números de punto flotante simples (float) y dobles (double) pueden ser sinónimos en algunas implementaciones de máquinas.
Dado que los objetos de los tipos enumerados anteriormente pueden interpretarse como números, nos referiremos a ellos como tipos aritméticos.
Los tipos char , int de todos los tamaños y los tipos enum se denominarán colectivamente tipos enteros. Los tipos float y double se denominarán colectivamente tipos flotantes.
El tipo de datos void (vacío) define un conjunto vacío de valores. El valor (inexistente) del objeto void no se puede utilizar de ninguna manera, no se pueden aplicar conversiones explícitas ni implícitas.
Debido a que una expresión vacía denota un valor inexistente, dicha expresión solo se puede usar como un operador de expresión o como el operando izquierdo en una expresión de punto y coma. La expresión se puede convertir explícitamente en void .
Capítulo 9 Tipos derivados
Además de los tipos aritméticos básicos, existen conceptualmente infinitos tipos derivados construidos a partir de los tipos básicos de la siguiente manera:
matrices de objetos de este tipo;
funciones que toman argumentos de un tipo dado y devuelven objetos de un tipo dado;
punteros a objetos de este tipo;
constantes que son valores de un tipo dado;
Introducción al lenguaje de programación C++ | ||
estructuras que son clases sin restricciones de acceso;
uniones, que son estructuras que pueden contener objetos de diferentes tipos en diferentes momentos.
EN en general, estos métodos de construcción de objetos se pueden aplicar de forma recursiva.
Un objeto de tipo void* (un puntero a void) se puede utilizar para apuntar a objetos de un tipo desconocido.
Objetos y LVALUE (direcciones)
Un objeto es una región de la memoria; Un lvalue (dirección) es una expresión que se refiere a un objeto. Un ejemplo obvio de una expresión de dirección es el nombre de un objeto.
Hay operaciones que dan expresiones de dirección: por ejemplo, si E es una expresión de puntero, entonces *E es una expresión de dirección que hace referencia al objeto al que apunta E .
El término "lvalue" proviene de la expresión de asignación E1=E2, en la que el operando izquierdo E1 debe ser una expresión de valor.
La siguiente discusión de cada operador indica si requiere operandos de dirección y si devuelve un valor de dirección.
Capítulo 11
Se puede usar un carácter o un entero corto si se puede usar un entero. En todos los casos, el valor se convierte en un número entero.
Convertir un entero corto en un entero largo siempre implica expansión de signo; los números enteros son cantidades con signo. Que los caracteres contengan o no un bit de signo depende de la máquina. El tipo de carácter sin firmar más explícito limita el cambio de valor de 0 a un máximo dependiente de la máquina.
En las máquinas donde los caracteres se tratan como firmados (firmados), los caracteres del conjunto de códigos ASCII son positivos.
Introducción al lenguaje de programación C++ |
||
Sin embargo, una constante de carácter dada por la secuencia octal esc sufre una expansión de signo y puede convertirse en un número negativo; entonces, por ejemplo, "\377" tiene el valor de 1 .
Cuando un entero largo se convierte en un entero corto o en un carácter, se trunca a la izquierda; los bits redundantes simplemente se pierden.
flotar y doble
Para expresiones flotantes, se puede realizar aritmética de punto flotante de precisión simple. Las conversiones entre números de precisión simple y doble se realizan tan matemáticamente como lo permita el hardware.
flotante y entero
Las conversiones de flotante a integral tienden a depender de la máquina. En particular, la dirección en la que se truncan los números negativos difiere de una máquina a otra. Si no se proporciona suficiente espacio para el valor, el resultado no está definido.
Convertir un valor integral en un flotante funciona bien. Si la implementación del hardware carece de los bits requeridos, hay cierta pérdida de precisión.
Punteros y enteros
Una expresión de tipo entero se puede sumar o restar de un puntero; en tal caso, el primero se convierte, como se indica en la discusión de la operación de suma.
Puede restar más de dos punteros a objetos del mismo tipo; en este caso, el resultado se convierte a tipo int o long según la máquina.
Cada vez que un entero sin signo se combina con un entero ordinario, el entero ordinario se convierte al tipo sin signo y el resultado es de tipo sin signo.
El valor es el entero sin signo más pequeño igual al entero con signo (mod 2** (longitud de palabra)) (es decir, módulo 2** (longitud de palabra)). En la representación binaria complementaria, esta transformación está vacía y no tiene lugar ningún cambio real en la representación binaria.
Ben Bergeron ha sido dos veces participante de CrossFit Games y también ha tenido el honor de entrenar a atletas tan destacados como Chris Spealer (7 veces participante de CrossFit Games, 3er lugar en 2011), Becca Voigt (7 veces participante de CrossFit Games, 3er lugar en 2011) . 2010), Heather Bergeron (2x CrossFit Games, 8ª en 2010), Michele Letendre (4x CrossFit Games, 4ª en 2014), Brian Curley (Master de 2010), Lisa Mikkelson (Master Champion 2012) y el New England CrossFit Team ( Campeones del Mundo 2011, Subcampeones 2013).
Entrenar a tales atletas me ha permitido desarrollar los programas más eficientes y efectivos. Este artículo proporciona ejemplos de los entrenamientos que sustentan la creación de mi sitio web Competitors Training.
monstruo de tres cabezas
La tarea principal es convertirse en este mismo monstruo de tres cabezas. Para tener éxito en CrossFit, necesitas desarrollar tres cualidades fundamentales: fuerza, habilidades y acondicionamiento. Lo más importante es alimentar las tres cabezas por igual: es decir, seguir el desarrollo uniforme de las tres cualidades básicas todos los días, todas las semanas, todos los meses. Si un atleta siente que una de las cualidades se está quedando atrás en el desarrollo (una cabeza está menos que las otras dos), entonces debe trabajar en ella hasta que alcance al resto.
Condición
Condición- este es un "deporte en fitness", fitness en este caso significa capacidad de trabajo. El atleta debe ser capaz de soportar la prueba, independientemente de la dificultad.
Para tener éxito en CrossFit, necesitas desarrollar tres cualidades fundamentales: fuerza, habilidades y acondicionamiento.
tarea dada e independientemente de la duración y el esfuerzo que se pueda gastar. Muchos atletas masculinos pueden hacer de 10 a 20 sentadillas de pecho con 102 kg, pero cuando hacen 225 sentadillas sin peso, su frecuencia cardíaca sube a 190 latidos.
Fuerza
CrossFit ama a los atletas fuertes. A continuación se presentan las características de los participantes de los Crossfit Games 2013. (hombres/mujeres).
Arranque: 259/153 libras (117/69 kg);
Clean and Jerk: 319/187 lb (145/85 kg);
Sentadilla trasera: 434/247 lbs (197/112 kg);
Peso muerto: 509/311 lb (231/141 kg).
La prueba más predecible fue la CJ Ladder (añadiendo peso cada 90 segundos en el envión). Los 10 primeros para hombres incluyeron atletas que terminaron el desafío con un promedio de 325 libras (147 kg). Los lugares del 11 al 20 se distribuyeron entre los atletas con un resultado de 315 lbs (143 kg), y los atletas ocuparon las líneas del 21 al 30, cuyo resultado fue de 313 lbs (142 kg).
Lo más importante es alimentar las tres cabezas por igual: es decir, seguir el desarrollo uniforme de las tres cualidades básicas todos los días, todas las semanas, todos los meses.
Los últimos 15 lugares fueron compartidos por atletas cuyo resultado en Clean and Clean fue de 295 lbs (134 kg). En otras palabras, cuanto más fuerte es el atleta, mayores son sus posibilidades de éxito. Sin embargo, esto sólo es posible con la presencia y suficiente desarrollo de las otras dos cualidades.
Habilidades
Solo hay unas pocas cualidades que pueden ayudar a distinguir a un buen atleta de los mejores más que sus habilidades. El rendimiento y la fuerza son esenciales para el éxito, pero no importa qué tan fuerte sea un atleta (227 kg de peso muerto) o qué resistencia tenga (capaz de correr 5 millas), o cuántos burpees y pesas rusas pueda realizar. Si un atleta no puede dominar grandes conjuntos de ring outs, flexiones de manos, doble salto de cuerda, flexiones de mariposa, entonces se verá obligado a detenerse donde termina su arsenal de habilidades.
De un monstruo de tres cabezas a un jugador de cinco armas
Movilidad
Por el nombre queda claro que esta es la cualidad que te permite moverte con mayor eficiencia y entrenar en mayor volumen.
moral
Un factor importante en la competencia es el bienestar del atleta cuando habla en público. Controlar tu estado mental te ayuda a usar tus nervios y adrenalina para mejorar tu rendimiento, concentrarte en la tarea e ignorar el ruido. Muchos atletas se desempeñan muy bien en el gimnasio, pero en la cancha grande simplemente no pueden recuperarse en el momento adecuado; es una barrera psicológica que hay que cruzar. Por lo tanto, vale la pena prestar atención y controlar la moral durante cada entrenamiento.
El mejor ejemplo de los 5 atletas es, por supuesto, Rich Froning.
Tiene todas las armas: fuerza, acondicionamiento, habilidades, movilidad y resistencia moral para competir en cualquier cosa, en cualquier lugar y en cualquier nivel. Esto es lo que estamos tratando de lograr.
Ejemplos de programación
Así es como se construye la programación en el sitio web de Comprtitors Wod, los programas de capacitación se dividen en varios grupos.
Preparándose para los Juegos de Crossfit
El desafío para los atletas que se han clasificado para los Juegos es simplemente sobrevivir los meses, las semanas y los días entre las Regionales y los Juegos. El propósito del proceso de entrenamiento en esta situación es preparar al atleta para lo desconocido.
Preparación para Regionales
Dicho programa de entrenamiento se crea para atletas que confían en que participarán en competencias regionales. No deberían desperdiciar su energía en repetir The Open Challenges, sino que es mejor comenzar a prepararse para los Regionales. Este proceso debe centrarse en los requisitos de la competencia (carga, movimiento, volumen, etc.). Nuestro objetivo en esta situación es desarrollar uniformemente las 5 cualidades de un atleta.
Ejemplo de ciclo semanal
lunes
Primer complejo:
- Snatch con mucho peso;
- Tomar y empujar con mucho peso;
- Varios tipos de sentadillas;
- Ejercicios gimnásticos (flexiones, medias a la barra, salida sobre las anillas, burpees, pistolas, etc.);
Segundo conjunto:
- Metcon;
- Línea media (hiperextensión, estiramiento (espalda, caderas), soportes en L, hiperextensión inversa, flexiones hacia atrás).
miércoles
Trabajando en tecnología:
- pizca;
- Toma y empuja;
- Ponerse en cuclillas;
- habilidades gimnásticas;
- Remo;
Segundo conjunto:
- Metcon;
- Linea intermedia.
viernes
- Trabajar la técnica de arranque (tracción, sumo pull, barbell clean, snatch, backbend);
- Ejercicios básicos para 20 o 100 repeticiones;
- Metcon con la adición de equipos (pesas, pelotas, cuerdas, llantas, piedras, martillo, etc.);
- Remo;
- Trabaja en la línea media.
martes
- Sprint o saltos (shuttle run, sprint de 40-60-100-200 m, saltos al cajón, saltos a una pierna, saltos de longitud);
- Empuje (peso muerto, sumo, inclinaciones con una barra en la espalda, peso muerto, tomando la barra en el pecho desde el suelo);
- Ejercicios básicos de 20 o 100 repeticiones (tomar, empujar, arrebatar, tirar, sumo, sentadillas y estocadas con barra en el pecho, en la espalda, por encima de la cabeza);
jueves
Trabajo de flexibilidad/movilidad (yoga, calentamiento con rodillo, estiramientos, estática).
Recuperación dinámica (caminata, remo, bicicleta, surf, escalada, etc.) preferentemente al aire libre.
sábado
(uno va dos conjuntos)
- Carrera de larga distancia;
- Levantamiento de pesas;
- Ejercicios gimnásticos/Metcon;
- Trabajar las cualidades de fuerza (levantamiento de la pelvis en posición prona con barra, sentadillas búlgaras con mancuernas, press de banca con agarre estrecho, ejercicios para tríceps, ejercicios para los músculos de la parte posterior de la pierna).
domingo
Día de descanso.
movimiento TA: Incluimos varios movimientos de arranque, envión y carga en nuestro programa de entrenamiento: una vez a la semana con pesos pesados y la segunda vez trabajando en la técnica de ejecución. Los movimientos rápidos con barra son la piedra angular de la competencia de CrossFit. Hay un 100% de posibilidades de que uno de los movimientos de levantamiento de pesas aparezca en la próxima competencia, por lo que no hay necesidad de perder tiempo y esfuerzo para esto.
sentadillas: ¡muy importante! Todo atleta prospera al volverse más fuerte y no hay más ejercicio efectivo que las sentadillas con barra. Debes realizar varios tipos de sentadillas 3 veces por semana con pesos pesados y medios. Incluso con sentadillas metcon, TA y 20 repeticiones para ejercicios básicos, esto es solo un número promedio de sentadillas.
20 repeticiones de ejercicios básicos: Alternaremos movimientos y cambiaremos el número de repeticiones de 20 a 100 dos veces por semana. 20 repeticiones son suficientes para asegurarnos de que desarrollamos algo más que la fuerza máxima. El trabajo debe estar dirigido a entrenar la resistencia, la resistencia y la eficiencia de los movimientos. Sí, “100 repeticiones” suena asqueroso, pero durante la competencia, el atleta comienza a recordarlas con gratitud.
Tracción: toda la cadena de los músculos posteriores es una especie de motor. Glúteos fuertes y una espalda erecta es de donde proviene todo el poder. Para su desarrollo, es necesario realizar tracción desde el suelo. Además, estos ejercicios son para la formación de la estabilidad de la línea media, que es importante para todos los atletas, independientemente del deporte.
Gimnasia: Se deben realizar 2 complejos gimnásticos por semana. Uno para practicar ejercicios básicos y movimientos de entrenamiento con el peso del cuerpo y otro para desarrollar habilidades, equilibrio y fuerza.
saltando. Los atletas deben estar alerta. Estos movimientos pliométricos te ayudarán a aumentar tu velocidad, coordinación, agilidad, nitidez en tu trabajo con barra y, en última instancia, te ayudarán a convertirte en un mejor levantador. Hay un buen ejemplo de esto: en la selección de la NFL, el criterio más importante es el salto vertical.
Metcon: en combinación exitosa dos o tres ejercicios pueden lograr mucho. Agregue a esto un ritmo rápido y múltiples repeticiones, y ahora el atleta ya es más fuerte y más resistente que el 90% de los demás atletas.
Remo: Concept 2 es una herramienta increíblemente poderosa para desarrollar el rendimiento de un atleta: tanto desde el punto de vista metabólico como de resistencia, todo ayuda a completar todo el desafío sin pausa. Mi consejo para cualquiera que quiera fortalecerse es que reme más.
Flexibilidad/Movilidad: quizás el más subestimado de los 10 componentes del fitness. La movilidad (piense en pelotas de lacrosse, patines, bandas elásticas, etc.) es excelente, pero no se debe descuidar el estiramiento tradicional.
Recuperación activa: El miércoles no es un día de descanso. El descanso activo te ayudará a recuperarte más rápido y prepararte para el día siguiente. Las actividades al aire libre ayudan al deportista a ampliar sus horizontes, así como a aplicar la experiencia del entrenamiento en un entorno real.
Trabajando en la línea media: todo lo que hacemos, de una forma u otra, depende de la fuerza de la línea media. En nuestro programa de entrenamiento, haremos estabilización de la línea media los sábados, así como algunos ejercicios de gimnasia los lunes y jueves.
días de descanso: debe protegerse completamente del estrés físico y mental. Esto es necesario para mantenerse fresco, sano y fuerte.
Un poco sobre el volumen: Las competencias regionales requieren que el atleta ejerza el máximo esfuerzo sin importar el período de tiempo, el peso y el ejercicio. Nuestro programa de entrenamiento es capaz de preparar al deportista para todo lo que se puede esperar de él en la competición.
Preparándose para el Abierto
Este programa es específicamente para atletas que quieren rendir al máximo y ganar su lugar en las Regionales (o en los Juegos de Calificación Máster). La tarea es preparar a los atletas para los requisitos de las competiciones abiertas (carga, movimientos, volumen, etc.)
lunes
Metcon;
TA con peso pesado;
Fuerza.
martes
Metcon;
Trabaja en habilidades.
miércoles
Metcon;
trabajo de TA en la técnica;
Fuerza.
jueves
Descanso.
viernes
Metcon;
habilidades;
Fuerza.
sábado
Metcon.
domingo
Descanso.
Metcon. La competencia abierta es principalmente una prueba de la cantidad de trabajo que un atleta puede realizar en un cierto período de tiempo. El 100% de las pruebas en los últimos 3 años se basaron en pruebas de acondicionamiento. La tarea número 1 para nosotros es crear un motor potente. Los Metcons aparecerán en cada complejo de entrenamiento, ya que ayudarán a lograr el objetivo. Los Metcons se basarán en hacer tantas repeticiones como sea posible en 4-20 minutos, y también consistirán en movimientos que se han hecho en competencias pasadas y que pueden aparecer en la siguiente. Correr, caminar con los brazos, remar, tirones en L, hiperextensiones, saltos en anillo son populares en CrossFit y son muy efectivos para el estado físico general, pero es poco probable que los atletas los encuentren en una competencia abierta.
EJÉRCITO DE RESERVA. Hasta ahora, nunca ha habido una tarea para tomar el peso máximo en las competencias abiertas, pero, de una forma u otra, debes trabajar para mejorar tus habilidades de TA. Durante los últimos 3 años, el 36% de los elementos colocados en Competiciones Abiertas fueron alguna forma de arranque, envión y envión.
Fuerza. No tienes que ser súper fuerte para tener un buen desempeño en Abiertos, pero la fuerza ciertamente ayuda con los pesos pesados. El 25% de todos los ejercicios se realizan con pesos medios o pesados. Ser más fuerte es importante, pero no a expensas de otras cualidades. No debe hacer un ciclo que consista solo en ejercicios de fuerza si el objetivo de un atleta es tener un buen desempeño en los Abiertos.
Habilidades. Basado en la experiencia de competencias pasadas, es muy importante dominar movimientos específicos: saltos de caja, saltos dobles en una cuerda, salida en los anillos, calcetines a la barra, pecho a la barra. Por supuesto, no hay garantía de que estos ejercicios vuelvan a aparecer, pero debes intentar convertirte en un profesional en ellos.
Un poco sobre el volumen. Para desempeñarse bien en las competiciones abiertas, debe realizar 1-2 complejos con un impacto máximo de 4-20 minutos por semana. Estos son requisitos de muy bajo volumen. Si un atleta entrena a gran volumen con la esperanza de clasificarse para las Regionales, quedará fuera. En cambio, es mejor concentrarse en la intensidad y la calidad de su entrenamiento.
entrenamiento y practica
Es muy importante ver las debilidades y trabajar en ellas. El algoritmo de acciones utilizado para mejorar movimientos altamente neurológicos, como saltos dobles, salidas de anillas y dominadas de mariposa, es muy diferente del algoritmo de movimientos altamente orgánicos, como peso muerto, propulsores y dominadas rectas.
La mejor manera de entrenar las adaptaciones neurológicas (agilidad, equilibrio, coordinación y precisión) es a través de la práctica. La práctica incluye el trabajo sobre las habilidades, el tiempo y la calidad de la ejecución. La práctica no debe realizarse con estrés muscular y cardiovascular. Lo mejor es practicar con un latido constante, un peso ligero y en un ambiente donde se pueda controlar la técnica.
Más metodo efectivo para el desarrollo de la adaptación orgánica (resistencia cardiovascular, fuerza, resistencia y flexibilidad) es el entrenamiento. El entrenamiento implica un trabajo intenso, con un ritmo cardíaco rápido, mucho peso y máxima intensidad.
Es muy importante determinar la causa y usarla para crear un programa de entrenamiento. Por ejemplo, si un atleta no es fuerte para correr debido a un metabolismo débil, entonces debe entrenar para correr con la mayor frecuencia posible. Si el atleta no es fuerte para correr debido a la forma de ejecución, correr con el máximo impacto no dará ningún resultado. Es mejor concentrarse en los ejercicios de carrera. Lo que mejorará la técnica de ejecución.
Artículo original http://competitorstraining.com/programming-philosophy/
Traducido por Keinich K.