Debate sobre los pequeños programadores y diseñadores

Hace algunos días, conversando con algunos amigos, compañeros de clase de la carrera de informática, surgió el tema sobre la gente a la que le ha costado mucho aprobar las materias, pero que aún así, siguen de todas formas luchando por mantenerse.

Por otra parte también comentamos a cerca de los niños o adolescentes que aprenden muy jóvenes a programar y se relacionan con las tecnologías de manera muy fluida. Saqué a colación el caso cercano de mi hermana menor,  que desde muy pequeña a sentido una atracción natural hacia los computadores y el dibujo, y en la interesante relación que está creando con el diseño web.
Ella posee cualidades plásticas bastante respetables, y ahora está comenzando a manejar algunas tecnologías relacionadas con el diseño web, tales como HTML5, CSS3 y JS, a sus 13 años sabe con bastante claridad que elegir para su futuro.
En torno a esto se generó un debate bien entretenido, un amigo comentó que de aquí a que un niño de 13 años tenga 18, las tecnologías que está aprendiendo ahora serán inútiles y obsoletas en ese momento, basándose en la comparación que haríamos entre Cobol o C, con lenguajes orientados a objetos como JAVA, C#, o Python. Además también afirmando que es incluso “dañino” o poco recomendado para un niño estudiar lenguajes de programación ya que finalmente estos quedarán fuera de uso y después costará mas para que el estudiante pueda aprender otros paradigmas y “reciclar” su anterior conocimiento.
Yo personalmente, opino que para un joven o un niño que después de los años se transforme en un profesional de la informática, es siempre recomendable practicar y relacionarse con los lenguajes que existen en su momento, aunque sea para enfrentarse a las problemáticas tradicionales que surgen en el aprendizaje, desarrollar un pensamiento lógico o por lo menos la curiosidad para aprender a cerca de las tecnologías vigentes.
Quizá un joven estudiante, autodidacta, -aunque no sea un factor decisivo-  tenga una ventaja frente a quienes recién llegando a estudiar carreras a fines a programación, se tengan que relacionar con el pensamiento lógico, ordenado y estructurado que eso conlleva.
En todo caso y a pesar de todo, me considero bastante ignorante respecto a estos temas, agradezco mucho a quienes hayan tenido la gentileza e interés de leer esta reflexión y por favor si tienen alguna opinión al respecto les pido que comenten esto porque pueden salir conclusiones muy valiosas por todos.
Gracias.
 bebop_09_21
Anuncios

Script Space Enginers

Querido lector:

En mi blog que estoy retomando pretendo ofrecer diversos recursos como por ejemplo este código en c# que estoy haciendo para el juego Space Engineers, a medida que avance iré actualizando este artículo, apenas lo suba a github publicaré el correspondiente enlace, y si hay alguien interesado en aprender, intercambiar conocimiento o aportar con consejos, sugerencias y críticas.

Si como dije anteriormente hay alguien desorientado que quiera aprender y no se lleve muy bien con el inglés, sólo indíquelo y yo con gusto comenzaré una serie de artículos relacionados al lenguaje o a la forma de programar estos scripts.

El script que pretendo desarrollar es un sistema sencillo y genérico para cualquier tipo de nave, para que el usuario pueda obtener información mediante los paneles LCD acerca del status general de los componentes y sistemas vitales, como oxígeno, energía, seguridad, integridad de los equipos funcionales, etc. La idea es que este sistema sea lo mas agnóstico al diseño de la nave o estación en donde se esté ejecutando, y además lo más fácil posible de instalar para los usuarios que no tienen conocimientos de programación.

De antemano muchas gracias a todos los caminantes que se paseen por estas páginas, espero hayan tenido una bonita navidad y que tengan un muy buen año nuevo.

Saludos.

Edito: Esta es la primera actualización del script, cuando esté completo voy a crear la guía que explica cada sección del código y la información para aprender a escribir estos scripts.

Actualmente el sistema permite:

  • Mostrar la información general de las baterías.
  • Configurar a que porcentaje el sistema alertará sobre baterías bajas.
  • Alertar con cambio de colores en las luces, y mensaje en panel designado por el usuario.

Las próximas mejoras serán:

  • En cuanto a energía reducir la potencia máxima de los propulsores, y apagar algunos bloques.
  • En cuanto a otras funciones, me gustaria programar módulos de seguridad, información de presurización y oxígeno, inventario, y algunas utilidades y funciones para usuarios más avanzados y programadores.

En próximas actualizaciones detallaré las próximas mejoras.

Por supuesto estoy totalmente abierto a consejos, sugerencias y críticas.

En las próximas actualizaciones intentaré que el código se vea mejor.

List<IMyTerminalBlock> baterias = new List<IMyTerminalBlock>();
List<IMyTerminalBlock> paneles = new List<IMyTerminalBlock>();
List<IMyTerminalBlock> parlantes = new List<IMyTerminalBlock>();

const string NOMBRE_PANEL_GENERAL = "Panel Info"; //Colocar el nombre del o de los paneles de información general.
const double BATERIA_BAJA = 34; //Porcentaje de batería con la que el sistema alertará sobre energía baja disponible.
const string NOMBRE_PANEL_EMERGENCIA = "Panel Emergencia"; //Panel donde se alertará sobre asuntos críticos de la nave.
const string NOMBRE_SOUND_BLOCK = "Parlante"; //Nombre del/los bloques de sonido que se requiera usar 

void Main(string argument)
{
   var mensaje = "";

   mensaje += StatusBaterias();
   mensaje += InformacionGeneral();
   EscribirEnPaneles(NOMBRE_PANEL_GENERAL, mensaje);
}

public string StatusBaterias()
{
   Echo("StatusBaterias -in");
   var mensaje = "================Baterías================";
   GridTerminalSystem.GetBlocksOfType<IMyBatteryBlock>(baterias);

   if (baterias.Count == 0)
   {
       mensaje += "\nNo hay baterías, o el sistema no las reconoce.";
   }
   else
   {
       double energiaActual = 0, maximaEnergia = 0, poderActual = 0;
       bool funcionando;

       for (var i = 0; i < baterias.Count; i++) //Información individual.
       {
           IMyBatteryBlock bateria = baterias[i] as IMyBatteryBlock;

           energiaActual += bateria.CurrentStoredPower;
           maximaEnergia += bateria.MaxStoredPower;

           funcionando = bateria.IsWorking;
           var nombre = bateria.DisplayNameText;

           //mensaje += string.Format("\n{0}: {1}", nombre, funcionando ? "Ok" : "Apagado");
           //mensaje += string.Format("\nEnergía Almacenada actualmente: {0} MW", bateria.CurrentStoredPower);
           //mensaje += string.Format("\nCapacidad máxima: {0} MW", bateria.MaxStoredPower);
           //mensaje += string.Format("\nNivel de energía en las baterías: {0:F2}%", 100d*(bateria.CurrentStoredPower/bateria.MaxStoredPower));
           //mensaje += bateria.DetailedInfo;
       }

       mensaje += " \n================General Baterías================";
       double porcentaje = 100d * (energiaActual / maximaEnergia);
       SeccionAdministracionBaterias(porcentaje);
       mensaje += string.Format("\nNivel de energía en las baterías: {0:F2}%", porcentaje);
   }

   Echo("StatusBaterias -out");
   return mensaje;
}

public void SeccionAdministracionBaterias(double porcentaje)
{
   if (porcentaje < BATERIA_BAJA)
   {
       var col = new Color(102, 0, 0);
       var luces = SelectorLucesInteriores();

       for (int i = 0; i < luces.Count; i++)
       {
           luces[i].SetValue("Color", col);
       }
       Echo("Escribiendo Mensaje de emergencia...  ");
       var msj = "Alerta!! La energía se está agotando! \nFavor revisar status.\nNivel de energía: " +
                 porcentaje.ToString("F") + "%";
       EscribirEnPaneles(NOMBRE_PANEL_EMERGENCIA, msj, new Color(102, 0, 0));
   }
   else
   {
       Echo("Porcentaje correcto");
       var luces = SelectorLucesInteriores();
       for (int i = 0; i < luces.Count; i++)
       {
           if (luces[i].GetValue<Color>("Color") == new Color(102, 0, 0))
           {
               luces[i].SetValue("Color", new Color(255, 255, 255));
           }
       }
   }
}

public string InformacionGeneral()
{
   string mensaje;

   mensaje = string.Format("\n\n{0}", DateTime.Now);
   return mensaje;
}

public IList<IMyInteriorLight> SelectorLucesInteriores()
{
   List<IMyTerminalBlock> lista = new List<IMyTerminalBlock>();
   GridTerminalSystem.GetBlocksOfType<IMyInteriorLight>(lista);

   List<IMyInteriorLight> luces = new List<IMyInteriorLight>();

   for (int i = 0; i < lista.Count; i++)
   {
       var luz = lista[i] as IMyInteriorLight;
       luces.Add(luz);
   }

   return luces;
}

private void EscribirEnPaneles(string nombrePaneles, string mensaje)
{
   Echo("Imprimiendo en pantalla -" + nombrePaneles + "-...");
   GridTerminalSystem.GetBlocksOfType<IMyTextPanel>(paneles);
   if (paneles.Count > 0)
   {
       for (int i = 0; i < paneles.Count; i++)
           if (paneles[i].DisplayNameText == nombrePaneles)
           {
               var panel = paneles[i] as IMyTextPanel;
               if (panel == null)
               {
                   throw new Exception("ha ocurrido un problema al intentar obtener el panel  " + nombrePaneles);
               }
               else
               {
                   panel.ShowPublicTextOnScreen();
                   panel.WritePublicText(mensaje);
               }
           }
   }
   else
   {
       throw new Exception("No hay paneles con el nombre " + nombrePaneles + " para escribir el mensaje.");
   }
}

private void EscribirEnPaneles(string nombrePaneles, string mensaje, Color color)
{
   Echo("Imprimiendo en pantalla -" + nombrePaneles + "-...");
   GridTerminalSystem.GetBlocksOfType<IMyTextPanel>(paneles);
   if (paneles.Count > 0)
   {
       for (int i = 0; i < paneles.Count; i++)
           if (paneles[i].DisplayNameText == nombrePaneles)
           {
               var panel = paneles[i] as IMyTextPanel;
               if (panel == null)
               {
                   throw new Exception("Ha ocurrido un problema al intentar obtener el panel  " + nombrePaneles);
               }
               else
               {
                   panel.SetValue("FontColor", color);
                   panel.WritePublicText(mensaje);
                   panel.ShowPublicTextOnScreen();
               }
           }
   }
   else
   {
       throw new Exception("No hay paneles con el nombre " + nombrePaneles + " para escribir el mensaje.");
   }
}

PD: Cuando esté listo el script arreglaré la indentación =P.

Mañana Lenta

Dámaso Alonso

Mañana lenta,
cielo azul,
campo verde,
tierra vinariega.
Y tú, mañana, que me llevas.
carreta
demasiado lenta,
carreta demasiado llena
de mi hierba nueva,
temblorosa y fresca,
que ha de llegar —sin darme cuenta—
seca.

En este momento mi mañana aunque cargada de hierba nueva temblorosa y fresca, es lenta, y este cielo tan azul y este campo tan verde me asustan, porque puede ser que -sin darme cuenta- toda la energía que tengo enfocada para lograr mis metas y objetivos se seque.

Presentación y Propuesta

En primer lugar quiero agradecer el tiempo que te estás tomando para leer lo que estoy -con dificultad y torpeza- publicando, de antemano pido disculpa por los errores de novato que voy a cometer, la intención de este blog es sintetizar y hacer públicas mis reflexiones y experiencias en un camino que ha comenzado a pavimentarse en mi vida, que son los estudios de informática, camino que de todas formas rondaba desde muy niño.

Deseo hacer de este espacio una instancia donde catalizar  las cosas que voy viviendo y aprendiendo, pretendo escribir en este blog desde cosas  técnicas hasta reflexiones muy alejadas del planeta pasando por una gran cantidad de temas muy interesantes para mi como la música, los videojuegos, los libros etc. Aunque siempre la piedra angular será las tecnologías de la información. Si pueden servirte como orientación o como simple entretención me sentiría en verdad muy satisfecho.

En estos momentos soy estudiante de Informática, precisamente Analista Programador, tengo 24 años y toda la vida me apasionaron las computadoras  y los sistemas informáticos. Actualmente vivo el sueño de ver muchas fantasías geek de la infancia hechas realidad, como  los smartphones, los videojuegos sandbox modernos, los libros digitales, y un largo etc que podría describir más adelante. Por supuesto hay muchas que si bien no se han concretado, ya comienzan a moldearse.

Espero que este espacio sea agradable e interesante para ti tanto como será para mi, y por favor, cualquier inquietud, consejo, o crítica házmela llegar sea por comentario en el blog o de la forma que más te acomode, espero ir progresando en esta aventura en la que me he embarcado, y tu ayuda es vital para poder proseguir.

 

Muchas gracias.