Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas

miércoles, 3 de enero de 2018

¿Cuándo te puedes considerar "experto" en un lenguaje de programación?

¿Cuándo te puedes considerar "experto" en un lenguaje de programación?

 

 

Si uno trabaja en programación, nunca vas a poder considerarte un ‘real’ experto: los lenguajes avanzan continuamente y dominar completamente solamente un lenguaje es imposible, pues las funcionalidades avanzan continuamente y sería excepcional que hayas desarrollado una aplicación que abarque TODAS las características de un lenguaje.

Dicho esto, aquí va una lista de puntos que si cumples algunas, vas en camino a volverte un experto. Estás en camino cuando:
  • Logras interpretar errores sin sentido y sabes como corregirlo (y creeme que encontrarás cientos de errores aparentemente sin sentido…)
  • Te puedes desplazar por todo el código de una aplicación solamente usando shortcuts del teclado.
  • Usas refactoring eficazmente para mejorar tu código.
  • Usas herramientas de integración continua y lo usas en tu ciclo de desarrollo (por ejempo Jenkins/Team Foundation/Team City)
  • Usas intensamente test unitarios para asegurarte que tu código funciona bien en diversas circunstancias.
Ser programador tiene cierto paralelismo con ser cirujano: no alcanza con saber del lenguaje sino dominar un ecosistema de herramientas que te permiten mejorar tu productividad y agilidad al resolver situaciones. (ser cirujano no es solo saber de tu rama , sino usar hábilmente los instrumentos qirúrgicos, entre otras cosas…)
Eres un nivel super experto cuando:
  • Dominas completamente una herramienta de compilación y trabajas desde la línea de comandos SIN entrar a la IDE(ya sea Ant,Gradle, Maven o la que tengas en tu entorno de trabajo)
  • Encuentras bugs dentro de tu IDE o librerias y eres capaz de encontrar un workaround o recompilarlo tu mismo.
  • Estás rankeado decentemente en Stack Overflow
  • Puedes prescindir de autocompletion feature, porque ya sabes los métodos de los objetos(!) (Hijo ‘e tigre!)
PD: el link es un error que encontré en Java / SDK y estoy lejos de considerarme un experto…

 

 

lunes, 25 de diciembre de 2017

¿Debería enseñarse programación en todas las carreras de la universidad?

¿Debería enseñarse programación en todas las carreras de la universidad?

 

 la programación que dí en mi carrera de Ingeniería Mecánica, pero es que ahí tiene bastante sentido que esté, ya que muchos trabajos relacionados requieren algún tipo de programación en algún tipo de lenguaje para hacer algo que el software no te ofrezca de primeras.
Ahora bien, lo que dimos tampoco fue ninguna maravilla, no pasamos de visual Basic, y el examen final era hacer una agenda de teléfonos… (Y una pregunta que valía un punto era que significaban las siglas USB)
Ahora bien, hasta qué punto puede ayudar, por ejemplo a un profesor en magisterio, o a una enfermera, o a alguien de Derecho, o un médico.. no lo sé. Supongo que habrá gente a la que al final le será útil los conocimientos aprendidos. Pero no creo que sea muy útil a nivel laboral
Ahora, lo que sí que consigue la programación es darte una capacidad analítica y de resolución de problemas bastante diferente y que te puede ayudar a enfocar tu vida de otra manera y realmente ser positivo para ti.
Por esa parte de convertirte en alguien más analítico, creo que sí debería darse, al menos de manera opcional, no sé si obligatoria en todas las carreras.
Lo que es cierto es que cada vez más gente necesita programar por lo menos a un nivel básico. Carreras de ingeniería y ciencias las necesitan cada vez más. Las carreras relacionadas con diseño están empezando a enseñar programación relacionada con desarrollo web.
Pero no, una persona que estudia filosofía, un psicólogo o una doctora en general no necesitan saber nada de programación. Claro, pueden ver casos más especiales como psicólogos que trabajan en reclutamiento que pueden necesitar saber algo de Data Science. Una vez conocí a un doctor que tuvo una idea de un sistema y empezó a aprender a programar. Pero, como dije, no, no necesita enseñarse programación en todas las carreras.
Algo interesante es que, incluso en carreras como ciencias de la computación o ingeniería de software, la calidad de enseñanza en cuanto a programación es muy baja: se enseñan estándares de hace décadas, los profesores no tienen habilidades didácticas y las tecnologías que se enseñan no se usan en la industria. Esto tiene que ver con un problema más profundo el cuál es cómo la industria se ha vuelto ajena a la academia. También tiene que ver con que gran parte del gran talento prefiere estar en la industria (el dinero es un factor importante, aunque no único). Si se quisiera enseñar programación en todas las carreras se tendría que hacer un esfuerzo enorme.
Algo que me gusta del sistema de Estados Unidos es que la gente no declara su carrera hasta su segundo o tercer año. La gente es aceptada en la universidad, se pide que se tomen clases de diferentes áreas, y hay requisitos mínimos para declarar tu carrera. Esto permite explorar mucho y reduce la presión que vivimos en Hispanoamérica del momento en el que tenemos que elegir la carrera. Este modelo hace que sepas más de otras áreas pues tuviste que tomar, tal vez, alguna clase de economía, otra de psicología, otra de biología y otra de sociología, más allá de las clases de tu carrera. Esto ha hecho que en Estados Unidos mucha gente que no se dedique al software tenga conocimientos básicos de programación, y eso ha dado mucha movilización entre las industrias.


 

¿Puede cualquiera aprender a programar?

 
¿Puede cualquiera aprender a programar?



Por supuesto, pero no cualquier puede dedicarse a esta carrera. Programar es sencillo, tan solo basta abrir una clase Java, poner a+b y ya estarás programando.
El problema de dedicarse al mundo de la programación es que se requiere muchísimo más que eso. Es una carrera a la que se le debe dedicar cuerpo y alma. Tu tiempo entero pasa a ser de tu profesión, requieres ser analíticos de mente precisa, ser capaz de resolver los problemas por ti mismo, tener una amplia capacidad de autoaprendizaje (salvo la universidad, después nadie te va a enseñar nada y tú tendrás que aprender todo por tu cuenta). Tener mucha paciencia para equivocarse y volver a insistir hasta que resulte. Aprender algo nuevo cada día y temas y tópicos completos cada año. Lo que aprendiste hace cinco años hoy probablemente ya no sirva y debes seguir aprendiendo.
Es una carrera muy bonita y aunque ahora muchos se empeñen en decir que todos pueden programar la verdad es que no todos están dispuestos a dedicarse a esta carrera.

sábado, 23 de diciembre de 2017

¿Cuál es el mejor antivirus para mi ordenador?

Dato Interesante: 

¿Cuál es el mejor antivirus para mi ordenador?

 

 

 

Anteriormente, hace más de 10 años, usaba Windows y nunca tuve un virus en el PC.
Solo una vez y de forma voluntaria deje que mi PC se infectase con el No-Teleco, un virus que habían desarrollado en la facultad de Informatica en A Coruña y que amablemente nos dedicaron a la facultad de Telecomunicaciones de Vigo. Era un virus para MS-DOS. Otra vez infecte, también voluntariamente, una máquina virtual con XP y solo para hacer la prueba de si era capaz de desinfectarlo de forma manual.
Salvo estos dos casos nunca infectó un virus mi PC y porque nunca abrí archivos de origen desconocido, nunca instalé software desde enlaces no solicitados y sobre todo porque hay que tener mucho sentido común.
Por mi profesión veo que clientes abren cualquier link que les aparece en internet, falsos programas de optimizar el pc, banners de programas milagro, reciben emails escritos por desconocidos y muy mal redactados (apestan a traducción de robot) y aún asi abre el ZIP envenenado. Falta sentido común.
Si por inexperiencia o por no pararte 2 segundos a decidir si debes hacer clic o no, quizás debas instalar un antivirus. En ese caso el que le instalamos a todos nuestros clientes es el AVG en versión Free y la Internet Security, ambas con un éxito del 100% de no infecciones. También porque les explicamos que no deben hacer y lo aplican (lo del sentido común que decía antes)
Otro caso de éxito es con clientes que le hemos instalado Ubuntu, y aunque al principio no es lo que acostumbraban a usar, una vez es familiar no lo cambian.

¿Cómo podría ser el futuro de los robots?

Se han Preguntado:

¿Cómo podría ser el futuro de los robots?

 

 

 

La tecnología de los robots no sólo debe crecer en el ámbito de mejores estructuras o desarrollo de compuestos (como el uso del enlace supercovalente del silicio para formar estructuras de microprocesadores), sino también en el desarrollo de la inteligencia artificial.
Si bien la Ley de Moore dice que el desarrollo tecnológico se duplicará por año (específicamente dice que el número de transistores en un microprocesador se duplicará por cada año, pero que luego se extendió el plazo a dos años por cuestiones de exactitud), los robots han avanzado mucho en cuanto a nuevos materiales con los que puedan soportar las nuevas funciones que se les atribuyen y para las que se les necesitan.
La ley de Moore:
Aunque los pasos de investigación en robótica parezcan agigantados, no se ha logrado el progreso deseado en I.A lamentablemente. ¿Pero cómo es que los sistemas informáticos (como mi smartphone) tienen cada vez mayor cantidad de funciones? ¿Eso no los hace más inteligentes?
Pues sí, pero el mayor desafío en lo que a robots respecta es imitar las funciones de un cerebro (puede ser humano o animal, en todo caso lograr aunque sea lo último sería un gran avance), objetivo que aun no se ha conseguido, y nos falta demasiado camino por recorrer.
En primer lugar, el ser humano posee la capacidad de interpretar situaciones y analizar espacios a una velocidad increíble y percibir nuevas situaciones con la capacidad de tomar decisiones.
Para ponerlo más claro:
  • Cuando una persona ingresa a una habitación y ve una mesa, de inmediato procesa la información y sabe lo que esto significa, de manera que al salir de la habitación e ingresar de nuevo, la mesa seguirá siendo una mesa.
  • Pero cuando un robot ingresa en la habitación (este experimento fue realizado por el MIT para ver los avances en I.A.), este interpreta todo el espacio como un montón de líneas y figuras tridimensionales, luego de procesar todo, recién puede decir que lo que ve es una mesa. Pero al sacarlo y hacerlo entrar nuevamente, repite su proceso observando otra vez líneas y figuras tridimensionales.
  • La diferencia más notable, es que aunque cambiemos de posición o incluso la pongamos boca abajo, las personas podemos reconocer a la mesa, cosa que sería toda una odisea para un robot en la actualidad.
Esto demuestra que la investigación no ha avanzado al doble por año (como pudo imaginarse Moore) Es más, actualmente no podemos imitar el cerebro de un insecto con unos cientos de neuronas, pues a pesar de esta limitación cerebral, estos pueden maniobrar en una habitación tridimensional sin errores, cosa que un sistema con I.A. actual aun no consigue (el MIT lo intentó, pero el resultado fue un insecto robótico que no podía volar sin estrellarse con las paredes u objetos de la habitación).
Lo irónico es que las máquinas realizan actividades que serían consideradas imposibles para un cerebro humano promedio (operaciones matemáticas complejas, probabilidades en el ajedrez, etc.) pero sufren infinitamente para realizar actividades elementales (atravesar una habitación, tomar decisiones en un incendio, o en un embotellamiento del tráfico, obtener resúmenes de libros, comprender cuentos infantiles, etc.).
Pero no todo son malas noticias, pues en lo que sí ha habido un avance considerable es en nanotecnología. Las posibilidades de este tipo de investigación son increíbles pues podrían llegar a alterar el funcionamiento del mundo como lo conocemos. Yo destacaría dos aspectos muy interesantes:
  • Metamateriales o la puerta a la invisibilidad. Esto no es algo sacado de una película de ciencia ficción, pues el desarrollo de estas mini-máquinas capaces de desviar la luz podría brindarnos la llave de la invisibilidad óptica.
Actualmente, con la investigación de metamateriales ha conseguido desviar la luz roja con éxito, (al tener mayor logitud de onda) y se busca conseguir la desviación de todas las longitudes de onda existentes.
  • Materia Programable, o la alteración de la composición interna de la materia. Por ejemplo, cambiar una pieza de hierro puro a oro, y no, no es la piedra filosofal; son mini-bots capaces de alterar el orden de los protones en los átomos cambiando así el elemento que forma. ¡Increíble! ¿No?

 

viernes, 22 de diciembre de 2017

¿Cuál es la mejor manera de planear y ejecutar un proyecto grande de software?

Que tal, el dia de hoy daremos respuesta a la pregunta:

¿Cuál es la mejor manera de planear y ejecutar un proyecto grande de software?

 imagen de : https://www.codejobs.biz

 

 

Yo consideraría los siguientes aspectos:
  • El ratio o tasa de fracaso de los proyectos crece exponencialmente con el tamaño de los mismos. Por poner un ejemplo, en empresas grandes solo el 9% de los proyectos son exitosos. No es únicamente por el tamaño del software sino por la cantidad de personas, criterios y decisiones que participan.
  • En el Chaos Report se establecen los factores de éxito de los proyectos obtenidos en la encuesta, mismos que te pueden servir de guía:
  1. Involucramiento del usuario
  2. Apoyo ejecutivo (sponsorship)
  3. Un claro enunciado de los requerimientos
  4. Planificación adecuada
  5. Expectativas realistas
  6. Hitos más pequeños
  7. Personal competente
  8. Apropiamento de la solución
  9. Una visión clara y objetivos
  • Adoptar prácticas formales de gestión de proyectos (como las del PMI) te pueden ayudar con la mayoría de los factores enunciados. Dale mucha importancia a la gestión de los riesgos, lo que te permitirá ser proactivo y no reactivo. También a la gestión de la calidad, porque hasta el 65% del costo del proyecto se puede ir en pruebas y corrección de defectos
  • Tendrás el problema de estimar el tiempo y el costo, lo cual no es posible si no se conoce el tamaño y para esto requieres conocer la totalidad de los requerimientos. En mi opinión conviene invertir al inicio del proyecto en el entendimiento de todos los requerimientos (aunque cambien más adelante) ya que esto nos permitirá hacer estimaciones (usando Puntos de Función), conocer más a fondo a los usuarios y sus expectativas, identificar riesgos y planificar mejor el proyecto. Estos requerimientos se pueden establecer como línea de partida (baseline) junto con un proceso de gestión de cambios que facilitará incorporar cambios de manera ordenada
  • En la parte técnica:
    • Una estrategia que te conviene definitivamente es desarrollar el proyecto de manera iterativa e incremental. De ninguna manera uses el ciclo de vida de cascada. Scrum puede servir para guiar el ciclo de vida pero es complicado adaptarlo para proyectos muy grandes (no imposible pero toma tiempo en la organización) . En todo caso, apóyate en un Scrum master
    • Te recomiendo usar el prototipado, en 3 vertientes:
      • Prototipos utilizados para reducir el riesgo técnico. Por ejemplo, si va a utilizar tecnología que no se ha probado antes en la organización puedes establecer actividades para hacer pruebas técnicas desde el principio del proyecto e ir reduciendo los riesgos (y establecer alternativas si no funciona)
      • Prototipos de interfaz para reducir el riesgo con el usuario. Existen muchas herramientas que te permiten hacer maquetas del sistema sin necesidad de programar y esto te permite reducir el riesgo de que el usuario vea algo que ya ha sido codificado y no le guste
      • Prototipos de interfaz con otros sistemas o librerías. Hacerlo al inicio te permite asegurar que la conexión con otros sistemas o librerías externas funciona adecuadamente
    • Definir la Arquitectura de alto nivel del software, esto es, los mecanismos y componentes del más alto nivel. Esto es mejor hacerlo al inicio
    • Busca a los mejores programadores que puedas pagar, procúrales lo que necesitan (silencio, no interrupciones, cubículos privados, computadoras/ordenadores potentes con pantallas grandes y doble monitor) y déjalos trabajar . Minimiza las reuniones y maximiza la comunicación asíncrona con ellos. El avance y los problemas que enfrentan se pueden informar vía correo o a través de un software. Las únicas reuniones presenciales (obligatorias) son para que entiendan los requerimientos
    • Procesos de soporte que requerirás:
      • Gestión de cambios
      • Gestión de configuración
      • Gestión de calidad

 
biz.