miércoles, 16 de mayo de 2018

¿Qué son las certificaciones IT?

¿Qué es una Certificación IT?

Cuando una empresa que lidera el mercado de las tecnologías, al punto de que miles de empresas alrededor del mundo requieren de personal especializado en sus productos, opta por crear cursos de capacitación, en los que permite al personal técnico conocer en profundidad esas tecnologías y productos para poder facilitar su implementación y puesta a punto.

Tomemos el ejemplo de Cisco: Cisco (su nombre oficial es Cisco Systems), es una empresa global con sede en San José (California, EEUU), principalmente dedicada a la fabricación, venta, mantenimiento y consultoría de equipos de telecomunicaciones. Crea, fabrica y vende tecnologías en el sector IT de las comunicaciones. Esto incluye Redes de datos, Comunicaciones Unificadas de VoIP, Video-Conferencias, Seguridad, Wireless, Data Center, Storage, Customer Relationship y un largo etc.

Cisco desarrolla sus propios equipos de hardware, y esos equipos trabajan con software desarrollado por la propia empresa (como el famoso Sistema Operativo IOS). Al mismo tiempo Cisco crea permanentemente nuevas tecnologías de protocolos, sistemas de seguridad, productos especializados, etc.
 
 Esta empresa (como muchas otras), es un conglomerado de distintas tecnologías que aportan al desarrollo y eficiencia de empresas, personas y gobiernos, genrando una red de negocios globales que involucra miles de clientes alrededor del mundo.

Para implementar sus sistemas, las empresas requieren de personal calificado y capaz de administrar, manejar y resolver inconvenientes relacionados con la plataforma de productos Cisco.

Pero los técnicos formados en cursos, terciarios o universidades tienen conocimientos estándares, aplicables en todos los casos, pero no están especializados en un producto o tecnología en particular. Justamente para eso existen las certificaciones, que se orientan a la especialización del personal en algún tipo de tecnología o producto en particular.

Cisco (como muchas otras empresas), tomó la decisión de fundar y desarrollar una división dentro de su empresa que se dedicara a crear certificaciones que permitieran a sus clientes saber si un individuo en particular domina un equipo, una tecnología o un producto.

Las certificaciones le permiten a las empresas contratar personal especializado sabiendo que la misma empresa que desarrolló el producto o servicio certifica la capacidad de ese profesional.
Una Certificación IT es un aval de la habilidad, conocimiento, y capacidad que tiene un individuo de manejar un equipo, un servicio o una tecnología en particular.

Cisco es mundialmente famoso por sus certificaciones pero existen otras empresas igualmente exitosas que tienen sus propios programas de certificaciones: Microsoft, Novell, Sun, Oracle, SAP, etc.

Aquí enumero algunas de las certificaciones más importantes en el mundo de la informática:
  • Microsoft: MOS, MCSE, MCSD, MCSA, MTA, ofimática, desarrollo e infraestructura.
  • Cisco: CCNA Routing and Switching, CCNA Secutity, CCNP, CCENT, CCIE, LPI Linux, LPIC-1, CPA.
  • ISACA: CISA (auditoría), CISM (seguridad), governance (CGEIT) y riesgos (CRISC).
  • PMI: Gestión(PMP), gerencia (CAPM), programas (PgMP), en Agile (PMI-ACP), riesgos (PMI-RMP) y cronogramas (PMI-SP).
  • Scrum (Gestión y desarrollo ágil de software) Certified Scrum Master(CSM), Professional Scrum Master(PSM) y Scrum Master CertifiedSMC.
  • ITIL: Fundamentos y ciclo de vida (operación, mejora continua, transición, estrategia, y ofertas y acuerdos de servicios).
  • Oracle: Java (Associate y Programador Java SE 7), Bases de Datos (12c y PL/SQL)
  • SQA yISTQB: Aseguramiento de la calidad y en testing del sofware.
  • CISSP de ISC2:Seguridad de la información.
  • Cobit 5:En gobierno y gestión del software.
  • Virtualización: En tecnologías de VMware y Citrix para virtualizar escritorios y otros sistemas.
  • Linux Comptia: Para desarrollo de soluciones con tecnología Linux.
  • Google Adwords y Analytics: Para creación de anuncios digitales y analítica web.
  • IBM Websphere:Para desarrollo de soluciones de integración de negocio, infraestructura de transacciones y aplicaciones, y portales.
  • SAP: Para desarrollo e implementación de soluciones de negocios basadas en tecnologías de SAP AG.
  • Ethical Hacker: Para tareas de identificación y detección de vulnerabilidades en empresas.
  • TCMD y TCAD: Certificaciones de la firma Appcelerator Titanium para desarrollo de apps con sistemas de open source.
  • PSP: Para la gestión del tiempo y mejora de la productividad endesarrollo y mantenimiento de sistemas. Brindada por el Software Engineering Institute (SEI).
  • Business Analyst (CBAP):Para analizar y entregar soluciones de acuerdo con el entorno empresarial y los requerimientos de los clientes.
Las empresas no solo desarrollan simples certificaciones, sino que suelen diseñar toda una carrera técnica en la que existen distintos niveles de complejidad y especialización.

A nivel mundial existe un gran debate sobre si las certificaciones garantizan o no la preparación del candidato. Pero lo que es cierto es que en muchas ocasiones una Certificación pesa más que algunas carreras terciarias y/o universitarias.

La realidad indica que muchas empresas usan las Certificaciones IT como casi el único instrumento para preseleccionar al mejor candidato a un puesto de trabajo. Tener altas certificaciones en una tecnología en específico aumenta el prestigio, la seguridad, las oportunidades y el estatus de todos los técnicos que las poseen.

Muchas de estas especializaciones se obtienen mediante un examen técnico que suele ser muy complejo de rendir y aprobar.
De tal modo que alrededor de estas especializaciones, se ha creado un conjunto de negocios que se basan en ofrecer cursos o libros a los candidatos para que puedan aprobar el examen. Incluso hay libros de preguntas y respuestas, sitios webs y software para ayudarlos a verificar sus conocimientos y entrenarlos en sistemas de examenes muy parecidos a los exámenes de certificación.

Las preparaciones para el examen pueden venir de las propias empresas certificadoras, pero también existen profesores e instituciones no-oficiales que facilitan el aprendizaje y preparan para que los técnicos rindan sus exámenes. Generalmente los costos de estos cursos suelen ser bastante elevados.

Pero la buena noticia es que también existen distintos tipos de organismos que a lo largo de todo el mundo ofrecen a los candidatos aprobar sus propias certificaciones en distintos tipos de tecnologías a precios bajos o incluso gratuitos.

A modo de ejemplo, en Argentina existen sistemas estatales de formación profesional que, a través de becas, permiten a los jóvenes certificarse en tecnologías IT, abriendo el mercado de las Certificaciones a personas que de otro modo no podrían costearlas por sus elevados precios.

Abajo le incluyo material para los que recién empiezan en la parte técnica.

Les invito a investigar este apasionante mundo de las especializaciones, no sin antes de advertirles que no todo es cuestión de dinero en el mundo de las certificaciones IT.

Hay un gran negocio montado para que estudiantes y profesionales se capaciten y paguen por los servicios educativos, pero (dependiendo del postulante), muchos candidatos pueden prepararse solos o a través de sistemas de becas o de capacitación profesional brindados por organismos estatales y privados.

No pierda la oportunidad de prepararse.

Ricardo Ponce
Instructor de Cisco
-----------------------------------------------

Academias virtuales de Microsoft y Cisco:
Exámenes de práctica:
 Programas de certificaciones gratuitas

lunes, 12 de marzo de 2018

Capacidades y competencias



¿QUE ES LA CAPACIDAD?

La definición “difícil” dice algo así: “La capacidad de un individuo es el conjunto de habilidades, destrezas, saberes, bla, bla, bla, que le permiten trabajar (resolver problemas) usando procesos aprendidos haciendo uso de las herramientas apropiadas”

Para que no sea tan complicado piense en esto:

Usted puede resolver problemas porque alguien le enseñó cómo resolverlo usando algún tipo de herramienta. (Ej: le enseñaron a cocinar una sopa usando ingredientes apropiados). Eso es una capacidad: la resolución de un problema con un proceso y unas herramientas apropiadas.


Obviamente para porder hacerlo, alguien le tiene que haber enseñado el procedimiento (como se prende la cocina, cuánto tiempo hervir las verduras para que no se quemen, las cantidades apropiadas de ingredientes), etc.

También le enseñaron que herramientas usar (cocina, sarten, olla, materias primas, etc).
Eso depende de sus habilidades (enseñadas y practicadas) y de los conocimientos adquiridos (cantidad de cada ingrediente, tiempo de cocción, etc).

SIN esos conocimientos NI esas habilidades usted no podría preparar esa sopa. No importa lo inteligente o brillante que usted sea. SIN CONOCIMIENTOS NI HABILIDADES prácticas no podría hacerlo. ¿Quizá podría aprender por sí mismo? Tal vez. Depende del tipo y complejidad del conocimiento. Quizá podrá aprender a clavar un clavo, pero ¿Cómo fisionar un átomo en el laboratorio? 

Algunos conocimientos están a su alcance, pero otros requieren de habilidades y conocimientos previos para llegar a ellos. No se puede ser experto en algo sin antes conocerlo con profundidad o estudiar gradualmente ¿no es así?.

¿Y QUE ES LA COMPETENCIA?

Bueno. Analicemos esto: cuando usted adquiere una capacidad (aprende a hacer una sopa), si entrena su propio cerebro, mejora sus habilidades y adquiere más conocimientos y experiencia, puede:

1) PRIMER GRADO DE UNA COMPETENCIA: Usar las herramientas y los procesos que ya conoce para aplicarlos a otros problemas similares (aprendió una técnica para hacer sopa de pollo y esa técnica le sirve para hacer sopa de verduras)

Claro que para eso requiere no sólo usar lo que aprendió antes (habilidades y conocimientos), sino que puede experimentar con otros ingredientes para adquirir más habilidades, imaginar para qué otras cosas puede usar el conocimiento adquirido (¿quizá hacer sopa es parecido a hacer engrudo?). Allí es cuando usted puede solucionar varios problemas con los que aprendió antes. 


Por supuesto que esto es sólo un grado de la COMPETENCIA. Una mínima variación en la aplicación de sus conocimientos adquiridos previamente. Lo importante es que SI NO TIENE PREVIAMENTE ESOS CONOCIMIENTOS no podrá adaptar el proceso a un nuevo problema.

2) SEGUNDO GRADO DE UNA COMPETENCIA: A usted se le presenta un nuevo problema que antes no tenía. Necesita lijar una cacerola para después pintarla como nueva. Usted es chapista de auto y sabe cómo lijar un auto. Un amigo le dice: “la cacerola es de una chapa aún más resistente que la chapa de auto, usa las mismas herramientas, pero como el metal es más duro, puedes pulir más que en las chapas de auto”.

Listo. Usted puede usar las mismas herramientas, pero usa un proceso diferente al primero para resolver el nuevo problema. Además se da cuenta que potencialmente este procedimiento de pulir de modo más agresivo, además se puede usar en autos viejos de la década de 1930 porque las chapas de autos clasicos eran mucho más resistentes que las chapas modernas.



Conclusión: aprende un nuevo procedimiento usando las mismas herramientas y además se da cuenta que ese nuevo procedimiento le da más variables para arreglar problemas viejos.

3) TERCER GRADO DE UNA COMPETENCIA: aquí es cuando usted, gracias a sus habilidades y su propia genialidad ya es capaz de darse cuenta de cómo usar nuevas herramientas usandolas con procesos nuevos que va inventando o con procesos viejos que ya conocía.


Por ejemplo: necesita colgar un cuadro en la pared de madera de su casa, pero no tiene martillo ni clavo, entonces decide usar el taco del zapato como martillo y un alfiler duro. Problema solucionado.

Las capacidades y compentencias están en todos lados, rodeándolo en su vida cotidiana. No se “trabe” intentando entenderlas si el tema es muy “intelectual” o “complicado” para usted.

Pero hágame caso: los ejercicios, las actividades, todo lo que planificamos en los cursos está pensado para que usted adquiera COMPETENCIAS PROFESIONALES.


El trabajo es difícil y duro pero debe hacerlo usted mismo (No es parte del esfuerzo que deba hacer yo como profesor o instructor).

¿Es duro? No si me hace caso. No si lo hace naturalmente.

Si intenta “sólo calentar la silla” y rendir con los exámenes… no lo logrará.

Pero no lo logrará… EN LA VIDA. Porque lo que se lleve de este curso está destinado a FORMAR PARTE DE USTED, no del profe, ni de la escuela ni del sistema educativo.

Lo que aprenda ES SUYO.

Como decía Steve Jobs en el discurso a los estudiantes egresados de Stanford (para el que sabe leer entre líneas).

Nada de lo que hace en el trayacto de su vida es inútil porque FORMA PARTE DE USTED y no sabe cuándo lo necesitará. Vea lo que dice Jobs del curso de caligrafía y cómo se “conectan los puntos” cuando uno mira hacia atrás.

Mantenga la motivación, que es lo primero que se pierde.


sábado, 6 de enero de 2018

FormacionProfesionalOficios


Probablemente usted, que lee este artículo, se sentirá incluído en alguna de estas categorías laborales que describo:
  • Muchos jóvenes que se preguntan qué pueden hacer para encontrar su primer empleo se quejan de que los empleadores buscan gente con experiencia real y no sólo con teoría.
  • Una gran cantidad de trabajadores quieren aumentar sus ingresos pero saben que en sus empleadores pasan por situaciones difíciles y les negarán un incremento de sus haberes.
  • Casi todos los puestos de trabajo tienen un techo de desarrollo profesional más allá del cual no permiten ascender profesionalmente y terminan frustrando a las personas con iniciativa a las que les gusta incrementar su potencial laboral.
  • Empleados de más de treinta y cinco, cuarenta o cincuenta años ven peligrar su fuente laboral porque son considerados obsoletos o desajustados según los parámetros de las empresas actuales y temen ser despedidos en el mediano o largo plazo.
 Estos son algunos ejemplos que se me ocurren rápidamente para explicar el por qué la Fromación Profesional en Oficios es una herramienta útil, fácilmente implementable y económicamente viable para una gran cantidad de casos actuales.

Hoy en día, el mercado laboral exige dos grandes competencias profesionales en todo tipo de trabajador:
  1. De los jóvenes, se espera que tengan la capacidad de acceder al mercado laboral con conocimientos prácticos y actuales, aún cuando postulan para su "primer empleo"
  2. De las personas "en paro", se exige la capacidad de acceder a nuevos trabajos en los que no tiene ninguna experiencia pero que requieren conocimientos mínimos para desempeñarse eficazmente en nuevos roles laborales, que es la conocida "reconversión laboral".

La Formación Profesional en Oficios puede dar una respuesta a todas estas necesidades actuales.

En Argentina, por diversos motivos que no vienen al caso explicar en este artículo, este tipo de formación ha estado  bastante desprestigiada. La principal causa de esto ha sido principalmente, los contenidos de aula viejos y desactualizados, pero en el último bienio (últimos dos años), ha comenzado a gestarse una transformación que actualmente atraviesa por la etapa más crítica e importante: la renovación de contenidos que se adaptan al mercado laboral actual.

En nuestro país la Formación Profesional se distribuye en diversos niveles que abarcan Escuelas Técnicas, Centros de Capacitación Laboral, Institutos Terciarios, Universidades, Posgrados y Postítulos, etc. El primer grado del escalón lo puede hacer cualquier persona a través de un Secundario Técnico. Pero para aquellos que no hicieron una escuela secundaria de ese tipo, pueden iniciar un trayecto técnico a través de un Centro de Capacitación Para el Trabajo (CCT por sus siglas) o de un Centro de Formación Profesional (CFP por sus siglas). Nuestro país cuenta con una extensa red de centros de formación Estatales (gratuitos) y Privados (pagos).





Muchos trabajadores desconocen la existencia de este tipo de formación basada en práctica y que existe como una oportunidad educativa que facilita la reinserción laboral en un mundo cada vez más tecnológico.

La Formación Profesional en Oficios en la actualidad es la opción por la que se decantan más del 50% de la población activa europea, que demanda cursos de capacitación para reinsertarse o reconvertirse en el mercado laboral de este nuevo siglo.

Si bien podemos explicar muchisimas razones para estudiar hoy en día un curso formativo de Oficios, voy a enumerar las  más importantes:
  • Los cursos están enfocados en el mundo laboral actual. Los cursos más avanzados permiten adquirir conocimientos técnicos y prácticos que permiten adquirir habilidades que le ayudarán al alumno a desempeñar un tipo concreto de empleo. En ese sentido, el estudiante ahorra tiempo y dinero sin estudiar materias que no tienen mucho que ver con el trabajo que quiere desarrollar.
  • Se abren las puertas para poder realizar prácticas. Una de las grandes ventajas de los centros de formación laboral es que empiezan rápidamente con las prácticas. El aprendizaje se orienta al mundo laboral, enfocando las actividades al trabajo que se desempeñará en el día a día.
  • Los ciclos formativos actuales están muy especializados y existe una enorme variedad de oferta educativa.
  • La oferta educativa se orienta a la formación contínua. Hoy en día, estudiar en un centro de Capacitación para el Trabajo permite obtener un certificado y facilita el ejercio de un oficio en relación de dependencia o como independiente autónomo. Pero al mismo tiempo es un escalón que permite prepararle para el acceso al Terciario o a la Universidad para acceder a grados de conocimientos más avanzados. Continuar formándose es imprescindible en el mundo laboral actual.
  • La formación técnica le permite adquirir experiencia mientras aprende. Las prácticas y las simulaciones le permiten enfocarse en actividades y solución de problemas que se presentan en el mundo real.
  • Si en algún momento se encuentra sin empleo, puede comenzar a generar ingresos por su cuenta porque estos cursos están pensados para darle la oportunidad de comenzar su propio negocio y hasta puede iniciar su propio negocio familiar.
  • Si tiene oportunidad de combinarlo con su profesión o trabajo actuales, podrá incrementar sus ingresos.
Muchos emprendedores sacan provecho de nuestros cursos. Si desde siempre le interesaron los negocios pero no ha tenido la oportunidad, puede planear la manera de comenzar a emprender uno con su oficio, aprovechando el tiempo libre, los fines de semana y otros espacios que tenga durante el día.

No pierda la oportunidad de progresar. Recuerde que la educación puede cambiar su futuro a partir de hoy mismo.

---------------------------------------------------------

Links de Interés:
Oferta de Cursos Gratuitos y Pagos, presenciales y a distancia
Catálogo de CCT de Mendoza (Argentina)
Curso Reparador de Computadoras y Redes TCP-IP
Cursos Técnicos
ProfesorPonce

https://clinicaspc.mercadoshops.com.ar/

lunes, 13 de marzo de 2017

Estudiar pensando en Competencias Laborales

 
Existen diversas definiciones de estudiar: 
  • Aprender de memoria uno o varios temas. 
  • Prepararse para aprobar un examen. 
  • Tratar de comprender algo de forma sistemática. 
  • Llevar a cabo los deberes que señala el profesor.
Pero esta es la visión obsoleta o "vieja" de estudiar que se tenía en la antigüedad. Algunos profesores aún tienen ese concepto de estudiar.
 
Pero para capacitación laboral, la definición es un poco más compleja:
 
"Estudiar es aprender una técnica o un proceso que permita resolver un problema puntual como el enseñado por el profesor y permita ser reutilizado en otras situaciones mediante una adaptación que hace el técnico al proceso aprendido".
 
Esto es lo que los profesores conocemos como "enseñar en competencias". Entregarle a usted un conocimiento que puede ser re-utilizado de acuerdo a sus habilidades, destrezas, conocimientos e imaginación.
 
Para aprender algo es necesario retenerlo o recogerlo, pero esto no es suficiente. Hace falta también entender lo que se aprende. Por eso en los cursos modernos debemos esperar que usted aprenda a pensar y reflexionar. 
 
Memorizar no permite comprender ni dominar un tema. Es apenas el primer paso para aprender. Sin memorizar no se puede entender algo.
 
El sentido del estudio es encontrar respuestas para algo que nos preguntamos y no sabemos. 
 
Pero eso sólo sirve para un problema actual que se nos presente. ¿Qué sucede si en mi vida laboral se presenta un problema que no me enseñaron en el curso? Pues deberé elegir alguna técnica o proceso que me enseñó el profesor y que sirve para para otra cosa y adaptar ese proceso al problema actual para solucionarlo. O deberé crear una técnica nueva a partir de lo que ya sé en ese momento.
 
Aprender en competencias es re-utilizar el conocimiento y adaptarse para aumentar nuestra experiencia para incrementar nuestras habilidades. Su meta no es aprobar este curso. Su meta DEBE SER aprender a incrementar sus habilidades a partir de lo que el profesor le enseñe.
 
Lo fundamental del estudio es la comprensión. Por ello debe esforzarse por comprender todo lo que esucha en clase. No basta entender algunas cosas: hay que incrementar el conocimiento de forma sistemática.
 
El estudio no es simplemente adquirir información, también es conocer cosas nuevas. Tampoco puede reducirse a hacer lo que señala el profesor. Si se limita a hacer esto, tendrá una actitud pasiva y no sabrá hacia dónde se dirige o qué persigue.
 
Amplíe en internet: vea videos en youtube, ingrese a foros técnicos, busque más información en blogs y webs, busque programas interactivos para entender procesos, realice prácticas de los procesos mostrados por el profesor.
 
Estudiar es aplicar las facultades mentales para adquirir, comprender, organizar el conocimiento y reutlizarlo de modos novedosos y auto-aprendidos.
 
Existen diversas técnicas que permiten obtener el máximo rendimiento en el estudio; pero tales técnicas debe seleccionarlas teniendo en cuenta :
 
  • Sus características psicológicas 
  • El curso o la materia que estudiará 
  • Los medios que tiene a su alcance 
  • El tiempo del que dispone para estudiar 
  • La calidad del tiempo del que dispone para estudiar
No es lo mismo estudiar concentrado, que estudiar mientras atiende el facebook de su celular.
 
El punto crucial es que ESTUDIAR ES APRENDER A PRENDER. Y se aprende gracias a estrategias que se le muestran a usted en el aula.
 
Recuerde que el tiempo de estudiar es AHORA. No cuando esté enfrentando un problema que no puede resolver en el mundo laboral. Nunca tendrá tanto tiempo para aprender como en este momento. Tampoco contará con el asesoramiento de un experto como su profesor, que le enseña, se adapta a usted y le muestra pacientemente sus errores y el modo de razonar un problema.
 


jueves, 19 de mayo de 2016

Curso de Juegos (6)

Curso “Programación de Juegos”

Curso Gratuito con codigo fuente.
Entrega 6.



Eliminando el BUG de nuestro programa
 

Nuestro programa de la nota anterior no estaba completamente depurado, porque tenía un pequeño error.

Como habrá visto al correr el programa, en cada colisión, el carácter-sprite se “come” al obstáculo representado por la [X], pero resulta ser que, debido a la técnica empleada para dibujar la pantalla, cuando borramos las [X], éstas se borran de la pantalla, pero “persisten” dentro de las variables Screen$(filas) o para ser más claros, en la memoria RAM. 


La consecuencia de esto es que después de limpiar la pantalla, debemos también eliminar las X de la RAM (es decir, de las variables que las contienen).


Si no lo hacemos, la rutina de detección de colisiones (que trabaja con la RAM, no con la pantalla dibujada) vuelve a detectar una colisión porque ha quedado el FANTASMA: no se ve en la pantalla pero para el programa sigue "estando" en la RAM


Esto trae una consecuencia: si vuelve a pasar el caracter-sprite por el lugar en donde antes había una X, el programa vuelve a sumar puntos, reaccionando como si la X estuviera aún dibujada.

Algo de Teoría
 

Lamentablemente ahora debo hacer un paréntesis para explicarle algo. Estos conceptos  deberían ser básicos para cualquier programador: ¿Qué sucede cuando creamos y asignamos una variable?

No se ofenda, pero es un hecho que muchos programadores tienen dificultades al desarrollar sus programas porque no saben (a ciencia cierta) cómo trabajan los lenguajes en la RAM. Es por eso que le explicaré en detalle lo que sucede cuando usted crea una variable, le asigna un valor y trabaja con esa variable.


Ahora veamos el primer grafico para entender esta explicación
 


Casi todos los lenguajes admiten más de una manera de crear o definir una variable. Mientras más estricto sea el lenguaje, menos formas de definir y asignar variables tendrá.
 

Cuando usted crea una variable tiene que ponerle un nombre.

Pero el nombre de una variable es un artificio del alto nivel, que hace que la vida del programador sea más sencilla. Con un nombre de variable, el programador no necesita tener en cuenta las posiciones de memoria. Porque eso es una variable: una posición de memoria que contiene datos.
 
El sistema (que trabaja en código máquina) no ncesita identificar una variable con un nombre, porque en realidad trabaja con los espacios de memoria RAM que pueden contener información (y que el programador identifica con el Nombre_de_la_variable).


Cuando alguien crea una variable, el sistema aparta en RAM un espacio que tendrá tantos bytes como el tipo de variable que usted esté creando:


•    Una variable integer (entera o identificada como %) se guardará en 16 bits o 2 Bytes.
•    Una variable long (o entero-largo o &) se almacenará en 32 bits o 4 Bytes
 

Todas las variables numéricas tienen una cantidad fija de Bytes para su almacenamiento. Si usted crea un array en la RAM se almacenarán tantos bytes como haya declarado en el array:

•    Por ejemplo, si en el alto nivel usted declara a%(1 to 10)
•    En la RAM se reservarán 20 bytes:  a%(1) ocupará los bytes 1 y 2, a%(2) ocupará los bytes 3 y 4, a%(3) los bytes 5 y 6 y así hasta terminar en a%(10) que ocupará los últimos 2 bytes del espacio reservado en RAM. ¿Por qué solo 2 Bytes por elemento? Pues porque USTED declaro con el símbolo % a la variable a%() y el sistema reservará 2 bytes por elemento para ese tipo de variable.


Cada vez que usted use una etiqueta, indicando que necesita usar el valor almacenado en la variable ( por ejemplo, invoca a%(12) ), el sistema ubicará en la RAM el espacio reservado para a%(12) y leerá los datos almacenados en esos dos bytes interpretándolos como datos numéricos de entero corto. Y se los retornará o los usará según sus instrucciones.
 

En realidad, el programador (desde el alto nivel), no necesita usar la etiqueta para trabajar con los datos. ¿Por qué? Porque si conoce el lugar de la RAM en donde están los datos, puede leerlos directamente sin usar el nombre de la variable. Incluso puede modificarlos.

Es por ese motivo que muchos lenguajes de alto nivel le dan la posibilidad a los programadores de leer y escribir directamente en las posiciones de memoria, con la única  condición de que escriba y lea en los lugares correctos para evitar un crash.


En Qbasic usted tiene las instrucciones PEEK y POKE para leer datos y escribir directamente en RAM. Para saber en que lugar de la memoria se almacenan los datos de una variable, tiene VARSEG que le indica el segmento de ram en la que se almacena y tiene VARPTR para saber su desplazamiento (alto, no se desespere, recuerde que Qbasic es PREHISTORICO…jaja y usa técnicas antiguas para manejo de RAM).
 

En realidad, si el lenguaje le da o no posibilidades o instrucciones para determinar la posición de RAM de los datos de una variable, no tiene mucha importancia. Hay muchas formas de leer directamente la RAM, aún cuando el lenguaje no le ayude. Pero tocar la ram directamente sin saber lo que está haciendo… es condenar al programa al crash inevitable.
 

En un lenguaje usted puede “leer” un contenido de esta manera:
 

B% = A%(12)
 

Y el programa hará lo siguiente: buscará en RAM los dos bytes que corresponden alos datos almacenados en a%(12), identificará la posición de memoria que almacena datos para B%, y después de eso, transferirá los datos entre las dos posiciones de memoria RAM. Es decir, llevará los dos bytes de a%(12) hasta la ram que identifica a B%.

¿Muchos pasos, verdad? Allí usted puede ver que hay un conjunto de lecturas y pasos adicionales que no hacen más que enlentecer su código, porque se podrían trasladar los datos más rapidamente haciendo un "enroque" de datos entre las dos posiciones de memoria.

Así es que una forma más eficiente de transferir esos datos sin tanta demora (o uso innecesario de ciclos de reloj de microprocesador) sería usar una instrucción de este tipo:
 

Poke Varptr(b%), Peek(Varptr(a%(12)))
 

O algo por el estilo (según el intérprete/compilador/versión de lenguaje que use). 

Esta instrucción transfiere directamente datos entre dos posiciones de memoria sin tanto alboroto, interpretación o perdida de tiempo de microprocesador. El problema es que si usa mal las instrucciones, se alterarán los datos de la ram con consecuencias imprevisibles.

Algunos lenguajes, hacen justamente eso desde el alto nivel (probablemente conoce la instrucción SWAP de algunos lenguajes de alto nivel). O la instrucción SWAP de lenguajes de bajo nivel qie intercambian el byte alto con el bajo.

Lamento toda la jerga técnica de procesos obsoletos, pero creo que la idea de entender cómo se trabajan las variables en RAM es importante para un programador. 

Mucho más para un programador de juegos porque a veces necesitará aumentar la velocidad de sus aplicativos. Las técnicas de acceso de datos en RAM sin pasar por el alto nivel, disparan la velocidad de los juegos.

Esto depende del lenguaje que usted esté usando, claro está. Algunos lenguajes mastodónticos son tan pesados y dependen tanto de rutinas y funciones de alto nivel que no importa lo que haga el programador, nunca tendrán buena velocidad. Sucede mucho con los que dependen de un run-time o un framework…. tienen grandes demoras en la ejecución.

Comprenderá que como programador…no me gustan los run-times, los frameworks ni los lenguajes interpretados… pienso que limitan a los programadores a los caprichos de los fabricantes de lenguajes. Microsoft es muy famoso por sus caprichos y dependiendo de sus intereses económicos, deja de actualizar entornos completos de programación.


También están los vaivenes económicos. Las empresas quiebran, cierran, o se fusionan. Muchos lenguajes prometedores dejaron de producirse por cierre o por decisiones de directorios en empresas fusionadas.
  
A eso me refiero cuando digo que es bueno que los programadores no hagan depender a sus proyectos de herramientas de terceros.

Un programador C++, PowerBasic, Delphi o Masm32 nunca dependerá de nadie. Si usted aprende a trabajar con un lenguaje de propósito general, nunca dependerá de rutinas de terceros. Cuando necesite algo en particular, simplemente...lo creará, lo inventará... y lo usará tantas veces como lo necesite.

Es por eso que es muy bueno (desde el punto de vista profesional)  crear nuestros propios motores o engines.  Y no me refiero solo a juegos, sino a aplicativos de todo tipo.

Hoy veo un gran problema en los países en desarrollo. La gran dependencia de herramientas de terceros. También se ve en la industria de juegos. Muchisimos programadores dependen de engines y sin ellos, serían incapaces de crear sus propios juegos. Hay pocos programadores básicos, con dominio completo de lenguajes de propósito general.


En fin, sigamos adelante…
 

Continuemos con la solución al BUG
 

Ahora que ya comprende como se manejan las variables en RAM, entenderá las dos posibles soluciones al BUG que propongo.

Ambas soluciones se aplican a la función GetColision%


La primer solución (la menos eficiente)


Esta solución es la menos eficiente, porque trabaja con muchas instrucciones adicionales. Pero la doy porque algunos compiladores no permiten la segunda solución propuesta.


Esta solución consiste en dividir la cadena Screen$(fila%) de la que debemos borrar la X. 


Tenemos que crear dos subcadenas: una con los caracteres que están a la izquierda del valor de columna% y otra con los caracteres que están a la derecha del valor columna%
 


Para el trabajo, se usan variables intermedias:

DIM der$
DIM izq$
DIM LenDer%
DIM LenIzq%

 
LenDer% y LenIzq% son números que contienen la longitud (en caracteres) de las cadenas derecha e izquierda. Se calculan teniendo en cuenta el valor columna% que apunta a la X que debe ser borrada:

LenIzq% = columna% - 1 (un lugar a la izquierda de columna%)
LenDer% = LEN(Screen$(fila%)) - columna% (al tamaño total de Screen$(fila%) se le resta el valor de columna% y nos da el tamaño de la cadena derecha)

Una vez obtenidos estos valores, simplemente definimos las subcadenas derecha e izquierda de este modo:

izq$ = LEFT$(Screen$(fila%), LenIzq%)
der$ = RIGHT$(Screen$(fila%), LenDer%)

 
Y terminamos reconstruyendo la nueva cadena Screen$(fila%) asegurándonos de colocar entre las cadenas izquierda y derecha un espacio vacio que en definitiva es el que borra la X fantasmal de nuestro juego:

Screen$(fila%) = izq$ + " " + der$

Mucho trabajo ¿verdad? Pero nada puede compensar el entretenimiento de ser programador básico… jeje.

Segunda solución: la más eficiente


Esta solución implica modificar directamente el contenido de la RAM.


Para eso usaremos la instrucción MID$ que modifica directamente en RAM los bytes que contienen sus datos. Escribimos esta instrucción:

MID$(Screen$(fila%), columna%, 1) = " "
 

Esta orden le dice al intérprete Qbasic que modifique dentro de la variable Screen$(fila%), al carácter número columna%. Así se ordena el reemplazo de un solo caracter (eso indica el ,1), que en este caso el el byte que contiene la X a borrar, para asignarle a ese carácter  un espacio vacío
 

Tenga en cuenta que algunos compiladores no permiten la manipulación directa en RAM a partir de funciones incorporadas, como el caso de MID$

Pero no es el caso de Qbasic, que como puede (y podrá ver en otros capítulos), tuvo muchisima popularidad por muchisimas buenas razones técnicas (en su momento, claro, porque ahora es obsoleto).

Como puede ver, es la solución más rápida porque tiene menos instrucciones, lo que se traduce en menos tiempo de ejecución.


Conclusión
 

Hay otro motivo por el que incluí las dos soluciones. Muchas veces desarrollar juegos implica que hayan varios programadores involucrados y suele haber también un coordinador general que toma decisiones al respecto de ciertos temas.

En casos parecidos a este del BUG, puede ser que el programador le presente una u otra solución y el coordinador deberá tomar la decisión de qué solución será la adoptada.
 

A veces los programadores no proponen las mejores soluciones técnicas o las más eficientes, sino que adoptan las soluciones más portables. No siempre lo mejor desde el punto de vista técnico es lo más portable.

Escuche lo que tienen para decir sus programadores.
Puede ser que le estén evitando un dolor de cabeza más adelante, cuando deba portar su proyecto a otros entornos.
 

Finalmente, es bueno que “lea” códigos fuentes y los re-escriba una y otra vez...  Eso es lo que le aconsejo con este curso.
 

Re-escriba estos códigos. Equivóquese y acierte implementando otras soluciones que las propuestas. Ser programador es mucho más que leer un código y aceptar premisas porque alguien lo dice (en este caso el que escribe).
 

Modifique. Explore. Genere versiones mejoradas. ¿Que no puede? ¿Qué no sabe cómo? Pues… bienvenido al mundo de los programadores. Los programadores y desarrolladores somos los que vivimos en las fronteras, allí en donde se hacen cosas que nunca nadie hizo antes. Y se hacen de un modo completamente diferente al habitual.







   Descarga Qbasic+DosBox desde aquí.
  ----------------------------------------------------------------------
  Curso Gratuito de Programación de VideoJuegos

  1. Introducción

  2. A quienes va dirigido el curso
  3.Temario del curso / Herramientas
  4.Primer programa (codigo fuente) 
  5.Detectando colisiones y comiendo objetos
  6.Eliminando el bug de nuestro programa
  ----------------------------------------------------------------------