En la reunión anterior, comentaba que estamos viviendo una época en la que recibimos una nueva generación de lenguajes de programación. Los lenguajes de programación son muy nuevos cuando no pasan de los 10 años, basta con pensar que Ruby cumplirá este año 21 años y se inició hace 23; Python tiene ya 25 años.
Ruby, Python y contemporáneos, representaron una nueva forma de diseñar lenguajes de programación, fue un momento en el que la preocupación fue la productividad, era lógico pensando que, considerando los precios actuales, el costo de hardware es barato pero el de un programador no. Esta generación de lenguajes sacrificó parte del performance en pro de crear lenguajes amigables, que más allá de ser fáciles, son productivos, lo que significa que puedes desarrollar x tarea en pocas líneas de código, o poco tiempo.
El límite de estos lenguajes
La generación de lenguajes productivos y dinámicos no está para nada mal, hay que recordar que las tecnologías de desarrollo son herramientas, algunas son buenas para algunos casos, y otras para otros. Por ejemplo, si necesitas desarrollar un MVP para mostrar tu idea, definitivamente un lenguaje dinámico es la mejor herramienta, de hecho, la mayoría de las aplicaciones (90% del internet probablemente) funciona perfectamente bien con las pequeñas limitaciones de los lenguajes dinámicos, así que no nos volemos las cabezas y pensemos que es la muerte de ningún lenguaje, siguen siendo excelentes opciones para muchas tareas.
El asterisco de estos lenguajes es que en la actualidad, la mayoría de las aplicaciones se comunican en tiempo real, los usuarios esperan tiempo de respuesta inmediatos y algunas aplicaciones reciben visitas con números de 6 dígitos. En estos casos, el tiempo de ejecución es crítico, normalmente cada milisegundo, cada porcentaje del CPU y cada MB de la RAM cuentan.
Los lenguajes evolucionan, y aunque la generación anterior sigue siendo muy buena y muy útil, hay nuevos desafíos que se busca resolver.
La nueva generación
Los lenguajes de nueva generación están diseñados para mantener la expresividad de la generación pasada (dentro de lo posible) y además ofrecer el performance necesario para los desafíos modernos. Estas son las características que en mi opinión tienen los lenguajes modernos:
Concurrencia, los lenguajes dinámicos e interpretados, no suelen tener buena fama en este apartado; los lenguajes modernos están diseñados para funcionar concurrentemente utilizando hilos o procesos.
Paralelismo: Al buen entendedor pocas palabras:
Compilan a lenguaje máquina o byte code. La generación anterior es de lenguajes, normalmente, interpretados.
Recolectores de basura más eficientes o de plano utilizan otras formas de manejar la memoria sin que el usuario tenga que hacerlo.
Manejo óptimo de la memoria, este caso es particularmente notorio en versiones iniciales de Ruby que se comían la memoria de la misma forma que Google Chrome :3
Particularmente la concurrencia es muy útil en situaciones de tiempo real, varios lenguajes anteriores manejan concurrencia, los lenguajes basados en la JVM son un buen ejemplo, sin embargo, los lenguajes modernos hacen que manejar múltiples ejecuciones de tu código sea más fácil, (cough... Go... cough).
Que sean compilados optimiza el performance y además hace que el deploying de aplicaciones sea más fácil, no tienes que instalar nada en el servidor (a menos que el código corra en una máquina virtual), solo subes el binario y listo.
¿Quiénes son?
4 ejemplos de lenguajes nuevos que pueden cumplir alguna o varias de las características mencionadas antes son:
Go - (Curso Go)
Swift - (Curso Swift)
Rust - (Más información)
Elixir - (Más información)
Aprende alguno de ellos, en serio, mi opinión es que lo que significó para muchos aprender Ruby, javaScript o Python hace 5 o 10 años, lo es para nosotros aprender uno de estos lenguajes.
¿No sabes con cuál de ellos empezar? Crea un hola mundo con alguno de ellos (o una estructura de datos o un algoritmo de ordenación, son súper buenos para probar lenguajes), y decide por ti mismo cuál te gusta más. De hecho, ni siquiera necesitas instalar nada para iniciar con estos lenguajes, varios de ellos tienen versiones para programar alguna que otra línea de código en el navegador, y si no, puedes usar CodePicnic.
Pero en serio, no dejes pasar el tiempo.Compilan a lenguaje máquina o byte code. La generación anterior es de lenguajes, normalmente, interpretados.
Recolectores de basura más eficientes o de plano utilizan otras formas de manejar la memoria sin que el usuario tenga que hacerlo.
Manejo óptimo de la memoria, este caso es particularmente notorio en versiones iniciales de Ruby que se comían la memoria de la misma forma que Google Chrome :3
Particularmente la concurrencia es muy útil en situaciones de tiempo real, varios lenguajes anteriores manejan concurrencia, los lenguajes basados en la JVM son un buen ejemplo, sin embargo, los lenguajes modernos hacen que manejar múltiples ejecuciones de tu código sea más fácil, (cough... Go... cough).
Que sean compilados optimiza el performance y además hace que el deploying de aplicaciones sea más fácil, no tienes que instalar nada en el servidor (a menos que el código corra en una máquina virtual), solo subes el binario y listo.
¿Quiénes son?
4 ejemplos de lenguajes nuevos que pueden cumplir alguna o varias de las características mencionadas antes son:
Go - (Curso Go)
Swift - (Curso Swift)
Rust - (Más información)
Elixir - (Más información)
Aprende alguno de ellos, en serio, mi opinión es que lo que significó para muchos aprender Ruby, javaScript o Python hace 5 o 10 años, lo es para nosotros aprender uno de estos lenguajes.
¿No sabes con cuál de ellos empezar? Crea un hola mundo con alguno de ellos (o una estructura de datos o un algoritmo de ordenación, son súper buenos para probar lenguajes), y decide por ti mismo cuál te gusta más. De hecho, ni siquiera necesitas instalar nada para iniciar con estos lenguajes, varios de ellos tienen versiones para programar alguna que otra línea de código en el navegador, y si no, puedes usar CodePicnic.
Pero en serio, no dejes pasar el tiempo.
Final
¿Sigues aquí? Pensé que habíamos dicho que no dejaras pasar el tiempo >.< !! Jaja, ok... antes de irte, no olvides dejar un comentario en el box de discusión en la parte de abajo del artículo.
Nos ayudas infinitamente compartiendo el post. Así que no lo dudes, da click en compartir :)
MANUALES DE PROGRAMACION
miércoles, 12 de octubre de 2016
sábado, 24 de septiembre de 2016
UDEMY: Crea tus temas de WordPress desde cero y sin programar [Español] [ RAR | PDF/MP4 | Curso Multimedia | 336.78 MB ]
Descripción:
Aprende a crear desde cero, tus propias plantillas y temas para WordPress sin programar código PHP.
¿Te gustaría crear tus propios temas profesionales de wordpress e integrarlos a tus blogs?
¡Deja de enloquecerte tratando de modificar temas de otros, ahora puedes crear tus propias plantillas de WordPress!
Crea tus temas para WordPress sin necesidad de programar
Aprende a crear desde cero, tus propias plantillas y temas para WordPress sin programar ni una línea de código PHP.
En este completo vídeo curso, aprenderás:
Que es WordPress y como funciona
Diferentes tipos de instalación
Como instalar un servidor web y MySQL en tu computadora
Como instalar WordPress en tu propia computadora
Como funciona WordPress por dentro (estructura, funciones, etc)
Como funciona un tema de WordPress
Cuales son los archivos necesarios para un Tema de WordPress
Para que sirve cada archivos del tema
Como comenzar con una plantilla "madre" preparada para personalizar
Cual es la estructura HTML de un tema de WordPress
Los fundamentos del archivo style.css
Como pasar tu diseño al tema por medio de CSS
Como insertar un slider de fotos en javascript
y mucho mas !!
Si quieres aprender a crear tus propias plantillas de WordPress, este es tu curso.
¿A quién está dirigido?
Cualquier persona puede realizar este curso
Se recomienda tener conocimientos básicos de maquetación web HTML y CSS
Contenido:
Sección 1: Introducción
Lectura Introductoria (PDF)
Descarga el material de trabajo
Sección 2: Preparación
Introducción
Instalación local de Apache + PHP + MySQL
Instalación local de WordPress
Instalación y configuración de tema base
Sección 3: WordPress por dentro
Funcionamiento interno (estructura. modulos, etc)
Archivos utilizados en un tema de WordPress
Sección 4: Armando el tema
Estructura HTML del template
Uso de style.css
Estiilzando con CSS parte 1 (html, body, wrapper, header, cuerpo)
Estiilzando con CSS parte 2 (menu, nav, artículos)
Estiilzando con CSS parte 3 (entradas, paginación, comentarios)
Estiilzando con CSS parte 4 (sidebar, archivos, tags, etc)
Sección 5: Personalización NO standard
Inserción de Slider de fotos animado en javascript
Sección 6: Conclusiones finales
Conclusiones y Lectura final (PDF)
LINK: http://adsnet.info/7YDP
Aprende a crear desde cero, tus propias plantillas y temas para WordPress sin programar código PHP.
¿Te gustaría crear tus propios temas profesionales de wordpress e integrarlos a tus blogs?
¡Deja de enloquecerte tratando de modificar temas de otros, ahora puedes crear tus propias plantillas de WordPress!
Crea tus temas para WordPress sin necesidad de programar
Aprende a crear desde cero, tus propias plantillas y temas para WordPress sin programar ni una línea de código PHP.
En este completo vídeo curso, aprenderás:
Que es WordPress y como funciona
Diferentes tipos de instalación
Como instalar un servidor web y MySQL en tu computadora
Como instalar WordPress en tu propia computadora
Como funciona WordPress por dentro (estructura, funciones, etc)
Como funciona un tema de WordPress
Cuales son los archivos necesarios para un Tema de WordPress
Para que sirve cada archivos del tema
Como comenzar con una plantilla "madre" preparada para personalizar
Cual es la estructura HTML de un tema de WordPress
Los fundamentos del archivo style.css
Como pasar tu diseño al tema por medio de CSS
Como insertar un slider de fotos en javascript
y mucho mas !!
Si quieres aprender a crear tus propias plantillas de WordPress, este es tu curso.
¿A quién está dirigido?
Cualquier persona puede realizar este curso
Se recomienda tener conocimientos básicos de maquetación web HTML y CSS
Contenido:
Sección 1: Introducción
Lectura Introductoria (PDF)
Descarga el material de trabajo
Sección 2: Preparación
Introducción
Instalación local de Apache + PHP + MySQL
Instalación local de WordPress
Instalación y configuración de tema base
Sección 3: WordPress por dentro
Funcionamiento interno (estructura. modulos, etc)
Archivos utilizados en un tema de WordPress
Sección 4: Armando el tema
Estructura HTML del template
Uso de style.css
Estiilzando con CSS parte 1 (html, body, wrapper, header, cuerpo)
Estiilzando con CSS parte 2 (menu, nav, artículos)
Estiilzando con CSS parte 3 (entradas, paginación, comentarios)
Estiilzando con CSS parte 4 (sidebar, archivos, tags, etc)
Sección 5: Personalización NO standard
Inserción de Slider de fotos animado en javascript
Sección 6: Conclusiones finales
Conclusiones y Lectura final (PDF)
LINK: http://adsnet.info/7YDP
miércoles, 14 de septiembre de 2016
Cómo mejorar programando (consejos)
La programación es una habilidad que como cualquier otra se perfecciona practicando, así que la respuesta fácil a la pregunta de cómo mejorar programando es "practicando".
Las interrogantes que surgen cuando decimos que para mejorar programando hay que practicar son varias... ¿practicar qué? ¿en qué dificultad? ¿dónde encuentro ejercicios? ¿en qué lenguaje debería hacerlo? ¿cómo sé que lo estoy haciendo bien?, etc. etc. De manera que decirle a alguien que necesita practicar para mejorar es darle una respuesta vacía, por otro lado, cabe resaltar que como en ninguna habilidad, no hay una receta mágica, ni una serie de pasos que te vayan a llevar del punto A al punto B en cierto tiempo, no existen esos caminos.
Entonces, ¿qué hago?
Si tomo sus cursos me aseguran que en X tiempo voy a poder tener X nivel
Esta es una duda que recibimos constantemente, sobre todo para quienes buscan adquirir el plan premium, es una duda legítima porque naturalmente tú esperas que tu inversión rinda frutos; la cuestión con esta duda es que como menciono antes, tu nivel muchas veces depende de la cantidad de tiempo que le has dedicado a perfeccionarla. De todas maneras, debe existir un esfuerzo para que nosotros alimentemos ese sentido de práctica y te ayudemos a recortar dramáticamente el tiempo en el que te puedas convertir en un experto.
Aquí es donde son parte clave los proyectos, esto es algo de lo que nosotros nos enamoramos, la idea de dirigir los cursos hacia proyectos, espero que hayas notado que la mayoría de nuestros cursos están orientados a eso (hasta aquí los ejemplos de CódigoFacilito).
Programar por proyectos es una de las mejores ideas que puedes tener, porque a final de cuentas programar no se trata sobre memorizar la sintaxis, saberse todas las palabras reservadas de un lenguaje o sobre si usar X tecnología es mejor que otra; programar es sobre solucionar problemas, de la manera más eficiente, utilizando una computadora, esa es la esencia de ser buen programador, poder solucionar problemas. La pregunta es ¿dónde me busco problemas?, la respuesta es, deja que los problemas vengan a ti.
Los problemas vienen a ti en forma de necesidades, cuando desarrollas con un proyecto en mente, las necesidades del proyecto se convierten en tus problemas:
Si pudiéramos medir la humedad del suelo cada 20 segundos, podríamos mandar una notificación cuando se encuentre baja y activar el sistema de riego.
A partir de un problema como el de arriba, puedes encontrar que necesitas:
Saber cómo medir la humedad del suelo
Saber cómo conectar el sensor con un lenguaje de programación
Leer la información cada cierto periodo de tiempo
Condicionar los valores del sensor
Mandar a llamar algo que active el sistema
Ahí tienes, 5 problemas listos para practicar tu habilidad como desarrollador.
Entonces, cómo, ¿defino un proyecto y ya listo?
Teóricamente sí, prácticamente me gustaría hacerte ciertas recomendaciones sobre cómo escoger proyectos:
Desafiantes pero no imposibles. Mide tus habilidades, investiga un poco antes para saber que lo que quieres crear está al alcance de lo que sabes, si te vas demasiado lejos puedes desanimarte con la falta de resultados. También importante, incluso más importante, es no tomar siempre proyectos pequeños o que estén en tu zona de confort, si son fáciles no crecerás, si haces lo mismo, quedarás obsoleto. Cambia las tecnologías, el panorama, la forma de solucionar las cosas, desafío es la palabra clave.
Termina los proyectos, no los dejes a medias, libéralos, deja que la gente los use, ponlo en las manos de los usuarios. Invierte en tu licencia del PlayStore o del AppleStore, compra un hosting barato o lo que sea necesario. Existe una enorme diferencia entre un programador que sabe poner el producto en las manos de los usuarios y el que no. Cuando el producto está siendo usado "en el mundo real" decimos que está en producción. Estar en producción es un mundo diferente con otros desafíos, nuevos errores y nuevas maniobras de solucionarlo.
Haz algo que te guste e interese. Los proyectos personales deben no solo ayudarte a mejorar, también pueden mantenerte motivado, fusiona tus ganas de aprender a programar con algo que te interese. En el mejor de los casos tu producto será muy usado y podrás vivir de él, que mejor que sea en algo que te divierta.
Usa tecnologías en el límite. En proyectos grandes es difícil utilizar lanzamientos de prueba o betas, siempre vamos por lo robusto, lo que ya está probado, para no fallar en producción. Cuando estás iniciando algo nuevo, instala lo más nuevo. Si usarás PHP, instala PHP 7, si es Rails, instala Rails 5, y así sucesivamente, ve por lo más nuevo.
¿Cómo sé que lo estoy haciendo bien?
Esta es la parte más complicada, para mí... sobre todo si estás trabajando solo o todos en el equipo tienen el mismo nivel o la misma experiencia. Es importante no solo hacer las cosas, si no querer hacerlas bien, ser perfeccionista, no solo con el producto, si no con el código que haces y las soluciones que propones. Aquí consejos:
Trata de re escribir código viejo después de cierto tiempo (3-4 meses), decimos que hacemos refactor del código, cuando lo mejoramos sin cambiar la funcionalidad del mismo. Mejorar código, significa que lo hacemos más dinámico, menos repetitivo y más organizado.
Aprende a escribir pruebas, existen pruebas unitarias, de funcionamiento, de interacción y más. Aprende a hacer testing de tu código. ¿Cómo me ayuda esto? Tu código es fácil de probar cuando está bien hecho, es difícil de probar cuando está mal hecho
Sube tu código a Github o Bitbucket, es decir, hazlo público. Hay muchas chances de que tu código no sea ciencia, nadie lo quiere robar. Hacerlo público, por otro lado, te ayudará a que la gente lo revise y te pueda dar consejos. Ojo: Es muy importante que tomes medidas de seguridad al hacer tu código público Nunca dejes contraseñas o datos sensibles en el repositorio público.
Lee el código de otros, sobre todo código de proyectos grandes, librerías populares, etc. Eso te dará un overview de cómo lo hacen los "mejores".
Las interrogantes que surgen cuando decimos que para mejorar programando hay que practicar son varias... ¿practicar qué? ¿en qué dificultad? ¿dónde encuentro ejercicios? ¿en qué lenguaje debería hacerlo? ¿cómo sé que lo estoy haciendo bien?, etc. etc. De manera que decirle a alguien que necesita practicar para mejorar es darle una respuesta vacía, por otro lado, cabe resaltar que como en ninguna habilidad, no hay una receta mágica, ni una serie de pasos que te vayan a llevar del punto A al punto B en cierto tiempo, no existen esos caminos.
Entonces, ¿qué hago?
Si tomo sus cursos me aseguran que en X tiempo voy a poder tener X nivel
Esta es una duda que recibimos constantemente, sobre todo para quienes buscan adquirir el plan premium, es una duda legítima porque naturalmente tú esperas que tu inversión rinda frutos; la cuestión con esta duda es que como menciono antes, tu nivel muchas veces depende de la cantidad de tiempo que le has dedicado a perfeccionarla. De todas maneras, debe existir un esfuerzo para que nosotros alimentemos ese sentido de práctica y te ayudemos a recortar dramáticamente el tiempo en el que te puedas convertir en un experto.
Aquí es donde son parte clave los proyectos, esto es algo de lo que nosotros nos enamoramos, la idea de dirigir los cursos hacia proyectos, espero que hayas notado que la mayoría de nuestros cursos están orientados a eso (hasta aquí los ejemplos de CódigoFacilito).
Programar por proyectos es una de las mejores ideas que puedes tener, porque a final de cuentas programar no se trata sobre memorizar la sintaxis, saberse todas las palabras reservadas de un lenguaje o sobre si usar X tecnología es mejor que otra; programar es sobre solucionar problemas, de la manera más eficiente, utilizando una computadora, esa es la esencia de ser buen programador, poder solucionar problemas. La pregunta es ¿dónde me busco problemas?, la respuesta es, deja que los problemas vengan a ti.
Los problemas vienen a ti en forma de necesidades, cuando desarrollas con un proyecto en mente, las necesidades del proyecto se convierten en tus problemas:
Si pudiéramos medir la humedad del suelo cada 20 segundos, podríamos mandar una notificación cuando se encuentre baja y activar el sistema de riego.
A partir de un problema como el de arriba, puedes encontrar que necesitas:
Saber cómo medir la humedad del suelo
Saber cómo conectar el sensor con un lenguaje de programación
Leer la información cada cierto periodo de tiempo
Condicionar los valores del sensor
Mandar a llamar algo que active el sistema
Ahí tienes, 5 problemas listos para practicar tu habilidad como desarrollador.
Entonces, cómo, ¿defino un proyecto y ya listo?
Teóricamente sí, prácticamente me gustaría hacerte ciertas recomendaciones sobre cómo escoger proyectos:
Desafiantes pero no imposibles. Mide tus habilidades, investiga un poco antes para saber que lo que quieres crear está al alcance de lo que sabes, si te vas demasiado lejos puedes desanimarte con la falta de resultados. También importante, incluso más importante, es no tomar siempre proyectos pequeños o que estén en tu zona de confort, si son fáciles no crecerás, si haces lo mismo, quedarás obsoleto. Cambia las tecnologías, el panorama, la forma de solucionar las cosas, desafío es la palabra clave.
Termina los proyectos, no los dejes a medias, libéralos, deja que la gente los use, ponlo en las manos de los usuarios. Invierte en tu licencia del PlayStore o del AppleStore, compra un hosting barato o lo que sea necesario. Existe una enorme diferencia entre un programador que sabe poner el producto en las manos de los usuarios y el que no. Cuando el producto está siendo usado "en el mundo real" decimos que está en producción. Estar en producción es un mundo diferente con otros desafíos, nuevos errores y nuevas maniobras de solucionarlo.
Haz algo que te guste e interese. Los proyectos personales deben no solo ayudarte a mejorar, también pueden mantenerte motivado, fusiona tus ganas de aprender a programar con algo que te interese. En el mejor de los casos tu producto será muy usado y podrás vivir de él, que mejor que sea en algo que te divierta.
Usa tecnologías en el límite. En proyectos grandes es difícil utilizar lanzamientos de prueba o betas, siempre vamos por lo robusto, lo que ya está probado, para no fallar en producción. Cuando estás iniciando algo nuevo, instala lo más nuevo. Si usarás PHP, instala PHP 7, si es Rails, instala Rails 5, y así sucesivamente, ve por lo más nuevo.
¿Cómo sé que lo estoy haciendo bien?
Esta es la parte más complicada, para mí... sobre todo si estás trabajando solo o todos en el equipo tienen el mismo nivel o la misma experiencia. Es importante no solo hacer las cosas, si no querer hacerlas bien, ser perfeccionista, no solo con el producto, si no con el código que haces y las soluciones que propones. Aquí consejos:
Trata de re escribir código viejo después de cierto tiempo (3-4 meses), decimos que hacemos refactor del código, cuando lo mejoramos sin cambiar la funcionalidad del mismo. Mejorar código, significa que lo hacemos más dinámico, menos repetitivo y más organizado.
Aprende a escribir pruebas, existen pruebas unitarias, de funcionamiento, de interacción y más. Aprende a hacer testing de tu código. ¿Cómo me ayuda esto? Tu código es fácil de probar cuando está bien hecho, es difícil de probar cuando está mal hecho
Sube tu código a Github o Bitbucket, es decir, hazlo público. Hay muchas chances de que tu código no sea ciencia, nadie lo quiere robar. Hacerlo público, por otro lado, te ayudará a que la gente lo revise y te pueda dar consejos. Ojo: Es muy importante que tomes medidas de seguridad al hacer tu código público Nunca dejes contraseñas o datos sensibles en el repositorio público.
Lee el código de otros, sobre todo código de proyectos grandes, librerías populares, etc. Eso te dará un overview de cómo lo hacen los "mejores".
sábado, 10 de septiembre de 2016
Tumbar paginas web (proframas y tutorial)
lo primero es descargar el archivolos cuales son:
1 - turbinas
2 - hide ip platinum + kenyen
3 - doshttp con serial
Lo segundo que tenemos que hacer es ir a INICIO, EJECUTAR, y escribimos CMD y escribimos ping www.ladireccion de tuvictima.com esto para buscar la ip de la victima como lo nuestra el grafico:
y luego ejecutamos doshttp y le escribimos la direccion de la victima
y para finalizar consultamos la direccion webnos debe aparecer asi:
1 - turbinas
2 - hide ip platinum + kenyen
3 - doshttp con serial
Lo segundo que tenemos que hacer es ir a INICIO, EJECUTAR, y escribimos CMD y escribimos ping www.ladireccion de tuvictima.com esto para buscar la ip de la victima como lo nuestra el grafico:
tercero ejecutar las turbinas las vamos a ejecutar tres veces y atacaremos los puestos 21, 81 y 80
y para finalizar consultamos la direccion webnos debe aparecer asi:
DESCARGA TODO AQUI: http://adsnet.info/3mFf
miércoles, 7 de septiembre de 2016
Cómo saber cuánto cobrar por desarrollar software
Introducción a las estimaciones
Una de las preguntas más recurrentes en conferencias y talleres que he impartido en herramientas de desarrollo de software es ¿Cuánto debe de cobrar por un sistema?. Mi respuesta a esta pregunta la realizo basado en dos conceptos: cuánto cobro por hora de desarrollo y cuántas horas me llevará realizarlo. Antes de que me contradigan los defensores de las metodologías ágiles, donde lo más importante es lo que la historia resuelva en lugar del tiempo que lleve, mientras los clientes me sigan preguntando cuánto me costará y cuánto tiempo te llevarás, yo seguiré intentando basar mis predicciones en estas variables. En el momento que los clientes me digan “sí, la historia es realmente importante y le dará muchos beneficios a mi negocio, así que puedes tomarte el tiempo que sea necesario”, entonces consideraré cambiar mi forma de pensar. Todo en nuestra vida implica tiempo y los compromisos se establecen en un periodo, incluso los programadores registran sus tiempos para hacer un análisis de recursos aplicados a un proyecto. Entonces, ¿por qué no utilizar esta variable al momento de definir las historias que son los elementos de división del trabajo en metodologías ágiles?
Calcular costos
El primer concepto, el costo de mi trabajo por hora, implica una serie de factores a considerar que debemos tener muy en cuenta: si la hora trabajada es efectiva o frente a la computadora, si cobro como programador senior o junior, los gastos de operación, entre otros. En cuanto a las horas productivas, como soy certificado en PSP (Personal Software Process), me he acostumbrado a registrar mis tiempos y créanme que estoy realmente sorprendido con mis resultados. En una sesión de 8 horas frente a la computadora, mi promedio de productividad es de 4.5 horas, ¿qué estoy haciendo en las 3.5 horas restantes?. La verdad creí que mi productividad era mayor, pero es complicado estar metido de lleno en la programación, porque si no ya te están interrumpiendo, te pones a revisar tus correos y otras cosas, por lo que yo considero que un promedio de 4 horas productivas es un buen promedio. Yo sé que habrá personas que tienen un promedio mayor, pero seguramente son personas que están más de 10 horas sentados frente a la computadora y eso, puede ser poco saludable. Hablando del nivel, solo quiero recomendarles que no solo tengan en cuenta el tiempo que le dedican al proyecto, también consideren las horas de sueño que perdieron en estudiar y aprender el lenguaje y las metodologías para poder hacer un sistema. Finalmente, el costo por hora debe incluir los gastos de operación, luz, agua, internet y sobre todo la computadora, pues va a llegar un momento en el que tendrán que actualizarla. Gastos de pasaje, personal adicional, como contadores, vendedores son gastos que seguramente cuando tengan su empresa tendrán que considerar en sus proyectos.
El segundo concepto es el que me ha impulsado a crear este artículo que espero sea el comienzo de muchos más, buscando como objetivo encontrar mi propio método de estimación. O quizás el método que pueda ser un estándar para nuestro país o nuestra región latinoamericana (se vale soñar ¿o no?). En los artículos que he escrito he tratado de atacar los temas que presento sin incluir mi punto de vista, con la mayor imparcialidad posible, pero esta serie de artículos no será el caso, pues pretendo ser irreverente, cuestionando cada uno de los métodos existentes y expuestos aquí, no con el objetivo de tirar veneno o tratar de ofender a nadie, sino como reflexionando en voz alta sobre la posibilidad de usarlo en cada uno de mis proyecto. Creo que debemos tomar lo mejor de cada uno y aplicarlos en la práctica con la única finalidad de incrementar nuestra productividad en el trabajo.
Existen muchos métodos de estimación de software, la idea principal es poder definir el tamaño y el tiempo que nos llevará desarrollar una aplicación. Es difícil poder dimensionar una pieza de software, pues en primer lugar es algo que no existe y que difícilmente se tiene idea clara de lo que será en el futuro, pues el cliente tiene una idea, el programador tiene otra, los empleados que lo van a usar tienen otra y se requiere de tiempo para poder crear solo la idea conjunta. Mas con las metodologías ágiles, donde se requieren resultados en el menor tiempo posible y versiones completamente funcionales. Lo importante es hacer un análisis en conjunto en el menor tiempo posible, con una persona como guía que vaya dándole forma a las ideas del cliente, de tal forma que para el programador sea viable su construcción. Este diseño conceptual será la base de la estimación y si está por escrito servirá como contrato entre las partes. Entre más detalle tenga este diseño, menos dolores de cabeza tendremos a la hora de entregar el producto final.
De las metodologías que conozco es importante la división de la solución del problema a resolver mediante el software en elementos lo más pequeños posibles. En SCRUM las historias no deben ser épicas, es decir, deben resolverse de 2 a 3 días. Hay que escoger la forma de dividir el sistema resultante: casos de uso, historias, puntos de función, proxies o cualquier elemento que pueda servir para que el programador defina el tiempo probable de desarrollo. Una vez dividido, cada elemento será estimado de acuerdo a la experiencia en proyectos anteriores. No olvidar agregar un factor de error en la estimación que puede ser un valor “a ojo de buen cubero” (en PSP se agrega un 25 % al tamaño y al tiempo de la estimación, si no existe histórico) o un valor en base a datos históricos (como lo hace el método PROBE de PSP).
El éxito de la estimación, en base a mi experiencia, radica en la forma en que se define el alcance y que tan pequeño sea el elemento en que se divide el sistema. La discusión en la formación del alcance debe ser guiado por el programador, con mente abierta y sin demeritar las ideas del cliente, pero exponiendo las situaciones imposibles en el sistema (todo es posible en un sistema, pero hay situaciones que llevaría mucho tiempo resolverlas). El levantamiento de requerimientos con el cliente es un arte y el programador o ingeniero de requerimientos debe tener la habilidad de llegar a un acuerdo, pues siempre he pensado que una mala definición del sistema es responsabilidad del equipo de desarrollo.
Y ¿todo esto debo saber para proporcionar un costo y un tiempo aun cuando el proyecto sea pequeño? Definitivamente no, todos lleva un proceso, debemos ir aprendiendo poco a poco, pero si tenemos en cuenta estos criterios, seguramente iremos mejorando nuestras estimaciones. Lo que siempre he dicho es si se ha estudiado tanto en este tema, mucho de los métodos desarrollados pueden servirnos para nuestro trabajo, siempre con sentido crítico, observando los resultados obtenidos y no basados en modas o tendencias que quizás en otros equipos de desarrollo funcionen correctamente.
Una de las preguntas más recurrentes en conferencias y talleres que he impartido en herramientas de desarrollo de software es ¿Cuánto debe de cobrar por un sistema?. Mi respuesta a esta pregunta la realizo basado en dos conceptos: cuánto cobro por hora de desarrollo y cuántas horas me llevará realizarlo. Antes de que me contradigan los defensores de las metodologías ágiles, donde lo más importante es lo que la historia resuelva en lugar del tiempo que lleve, mientras los clientes me sigan preguntando cuánto me costará y cuánto tiempo te llevarás, yo seguiré intentando basar mis predicciones en estas variables. En el momento que los clientes me digan “sí, la historia es realmente importante y le dará muchos beneficios a mi negocio, así que puedes tomarte el tiempo que sea necesario”, entonces consideraré cambiar mi forma de pensar. Todo en nuestra vida implica tiempo y los compromisos se establecen en un periodo, incluso los programadores registran sus tiempos para hacer un análisis de recursos aplicados a un proyecto. Entonces, ¿por qué no utilizar esta variable al momento de definir las historias que son los elementos de división del trabajo en metodologías ágiles?
Calcular costos
El primer concepto, el costo de mi trabajo por hora, implica una serie de factores a considerar que debemos tener muy en cuenta: si la hora trabajada es efectiva o frente a la computadora, si cobro como programador senior o junior, los gastos de operación, entre otros. En cuanto a las horas productivas, como soy certificado en PSP (Personal Software Process), me he acostumbrado a registrar mis tiempos y créanme que estoy realmente sorprendido con mis resultados. En una sesión de 8 horas frente a la computadora, mi promedio de productividad es de 4.5 horas, ¿qué estoy haciendo en las 3.5 horas restantes?. La verdad creí que mi productividad era mayor, pero es complicado estar metido de lleno en la programación, porque si no ya te están interrumpiendo, te pones a revisar tus correos y otras cosas, por lo que yo considero que un promedio de 4 horas productivas es un buen promedio. Yo sé que habrá personas que tienen un promedio mayor, pero seguramente son personas que están más de 10 horas sentados frente a la computadora y eso, puede ser poco saludable. Hablando del nivel, solo quiero recomendarles que no solo tengan en cuenta el tiempo que le dedican al proyecto, también consideren las horas de sueño que perdieron en estudiar y aprender el lenguaje y las metodologías para poder hacer un sistema. Finalmente, el costo por hora debe incluir los gastos de operación, luz, agua, internet y sobre todo la computadora, pues va a llegar un momento en el que tendrán que actualizarla. Gastos de pasaje, personal adicional, como contadores, vendedores son gastos que seguramente cuando tengan su empresa tendrán que considerar en sus proyectos.
El segundo concepto es el que me ha impulsado a crear este artículo que espero sea el comienzo de muchos más, buscando como objetivo encontrar mi propio método de estimación. O quizás el método que pueda ser un estándar para nuestro país o nuestra región latinoamericana (se vale soñar ¿o no?). En los artículos que he escrito he tratado de atacar los temas que presento sin incluir mi punto de vista, con la mayor imparcialidad posible, pero esta serie de artículos no será el caso, pues pretendo ser irreverente, cuestionando cada uno de los métodos existentes y expuestos aquí, no con el objetivo de tirar veneno o tratar de ofender a nadie, sino como reflexionando en voz alta sobre la posibilidad de usarlo en cada uno de mis proyecto. Creo que debemos tomar lo mejor de cada uno y aplicarlos en la práctica con la única finalidad de incrementar nuestra productividad en el trabajo.
Existen muchos métodos de estimación de software, la idea principal es poder definir el tamaño y el tiempo que nos llevará desarrollar una aplicación. Es difícil poder dimensionar una pieza de software, pues en primer lugar es algo que no existe y que difícilmente se tiene idea clara de lo que será en el futuro, pues el cliente tiene una idea, el programador tiene otra, los empleados que lo van a usar tienen otra y se requiere de tiempo para poder crear solo la idea conjunta. Mas con las metodologías ágiles, donde se requieren resultados en el menor tiempo posible y versiones completamente funcionales. Lo importante es hacer un análisis en conjunto en el menor tiempo posible, con una persona como guía que vaya dándole forma a las ideas del cliente, de tal forma que para el programador sea viable su construcción. Este diseño conceptual será la base de la estimación y si está por escrito servirá como contrato entre las partes. Entre más detalle tenga este diseño, menos dolores de cabeza tendremos a la hora de entregar el producto final.
De las metodologías que conozco es importante la división de la solución del problema a resolver mediante el software en elementos lo más pequeños posibles. En SCRUM las historias no deben ser épicas, es decir, deben resolverse de 2 a 3 días. Hay que escoger la forma de dividir el sistema resultante: casos de uso, historias, puntos de función, proxies o cualquier elemento que pueda servir para que el programador defina el tiempo probable de desarrollo. Una vez dividido, cada elemento será estimado de acuerdo a la experiencia en proyectos anteriores. No olvidar agregar un factor de error en la estimación que puede ser un valor “a ojo de buen cubero” (en PSP se agrega un 25 % al tamaño y al tiempo de la estimación, si no existe histórico) o un valor en base a datos históricos (como lo hace el método PROBE de PSP).
El éxito de la estimación, en base a mi experiencia, radica en la forma en que se define el alcance y que tan pequeño sea el elemento en que se divide el sistema. La discusión en la formación del alcance debe ser guiado por el programador, con mente abierta y sin demeritar las ideas del cliente, pero exponiendo las situaciones imposibles en el sistema (todo es posible en un sistema, pero hay situaciones que llevaría mucho tiempo resolverlas). El levantamiento de requerimientos con el cliente es un arte y el programador o ingeniero de requerimientos debe tener la habilidad de llegar a un acuerdo, pues siempre he pensado que una mala definición del sistema es responsabilidad del equipo de desarrollo.
Y ¿todo esto debo saber para proporcionar un costo y un tiempo aun cuando el proyecto sea pequeño? Definitivamente no, todos lleva un proceso, debemos ir aprendiendo poco a poco, pero si tenemos en cuenta estos criterios, seguramente iremos mejorando nuestras estimaciones. Lo que siempre he dicho es si se ha estudiado tanto en este tema, mucho de los métodos desarrollados pueden servirnos para nuestro trabajo, siempre con sentido crítico, observando los resultados obtenidos y no basados en modas o tendencias que quizás en otros equipos de desarrollo funcionen correctamente.
sábado, 3 de septiembre de 2016
Video2brain: WordPress práctico. Sitios multilingües (2016) Trabaja contenidos en múltiples idiomas en tus proyectos WordPress (2016)
Consigue un sitio web preparado para la creación y gestión de contenidos en múltiples idiomas sin que la tarea se convierta en un proceso demasiado complicado e interminable, solo al alcance de usuarios experimentados. Gracias al uso de WordPress, como gestor de contenidos y Polylang, como núcleo de soporte de múltiples idiomas, daremos los pasos necesarios poco a poco para conseguir ofrecer una experiencia rica en detalles en todos los idiomas que puedas necesitar, para así conseguir llegar al mayor número de personas posible.
ARA LA CORRECTA VISUALIZACIÓN DEL CURSO)
Resolución mínima de pantalla de 1.024 x 768
Tarjeta de sonido, altavoces o auriculares
Pentium 4 a 2,6 GHz o G4 a 1 GHz
512 MB de RAM
LINKS: http://adsnet.info/WZdp
ARA LA CORRECTA VISUALIZACIÓN DEL CURSO)
Resolución mínima de pantalla de 1.024 x 768
Tarjeta de sonido, altavoces o auriculares
Pentium 4 a 2,6 GHz o G4 a 1 GHz
512 MB de RAM
LINKS: http://adsnet.info/WZdp
Introducción al Hacking y Ciberseguridad / Video Curso / 2016 / GOOGLE DRIVE
Aprende a protegerte de las técnicas que usan los cibercriminales para acceder a la información almacenada en una red.
En este curso aprenderás desde cero las técnicas que usan los cibercriminales para tomar el control de los sistemas. Esto te permitirá proponer contramedidas para mitigarlas y proteger tu red frente a ataques a la Seguridad de la Información.
Contenido:
Más de 250 páginas de información detallada y más de 3 horas de vídeo con demostraciones prácticas que podrás realizar en tu propio laboratorio.
Conceptos de Seguridad de la Información
Técnicas de hacking: sniffing, phishing, password cracking, Man in the Middle, criptografía, …
Contramedidas
Normas y estándares de Ciberseguridad
Laboratorios Prácticos
Todas las demostraciones que se hacen en el curso podrás realizarlas en tu propio laboratorio. Aprenderás a instalar y configurar el laboratorio utilizando herramientas gratuitas.
¿Cuáles son los requisitos?
Administración de sistemas Windows
Administración de sistemas Linux
Fundamentos de Redes
Direccionamiento IP
TCP/IP
¿Qué voy a aprender en este curso?
¡Más de 49 clases y 7.5 horas de contenido!
Conocer los fundamentos de la Ciberseguridad
Analizar las diferentes técnicas de ataque que usan los cibercriminales
Proponer contramedidas para los ataques estudiados en el curso
Planificar sistemas de seguridad en capas
Conocer los diferentes estándares relacionados con la Seguridad de la Información
Proponer medidas de seguridad para contrarrestar los ataques dirigidos a los usuarios
¿A quién está dirigido?
Administradores de Redes
Administradores de Sistemas
Cualquier persona interesada en introducirse en el mundo de la Seguridad de la Información y el Hacking
Sección 1: Introducción a la Ciberseguridad
Conceptos Fundamentales de Ciberseguridad 7 páginas
Conceptos Fundamentales de Ciberseguridad: Confidencialidad 04:05
Conceptos Fundamentales de Ciberseguridad: Integridad 05:15
Estándares y Normativas de Seguridad de la Información 7 páginas
Amenazas a la Ciberseguridad 10 páginas
Naturaleza del Ciberespacio 03:01
Incidentes de Ciberseguridad 10 páginas
Ciberseguridad 11:28
Ciberseguridad: Configurar el Laboratorio de Prácticas 07:56
Ciberseguridad: Vulnerabilidades 12:20
Ciberseguridad: Amenazas 08:31
Ciberseguridad: Ciberguerra 06:22
Sección 2: Introducción al Hacking
Footprinting y Reconocimiento 13 páginas
Escaneo de Redes 22 páginas
Escaneo de Redes: Zmap 09:32
Escaneo de Redes: Nmap 05:01
Enumeración 13 páginas
Enumeración: Demostración 07:14
Hacking del Sistema 13 páginas
Hacking del Sistema: Hackear Windows 8 12:28
Hacking del Sistema: Meterpreter 08:34
Hacking del Sistema: Eliminación de Registros 05:19
Sección 3: Protección de Datos
Sniffing de Red 8 páginas
Sniffing de Red: Sniffers 08:16
Sniffing de Red: ARP Spoofing 15:07
Sniffing de Red: MITM 07:30
Secuestro de Sesiones 4 páginas
SQL Injection 11 páginas
SQL Injection: Demostración 11:55
Data Leak Prevention 7 páginas
Anonimato y Deep Web 14 páginas
Criptografía 13 páginas
Criptografía: Demostración 12:13
Denegación de Servicio 11 páginas
Denegación de Servicio: Demostración 05:32
Sección 4: Malware
Introducción al Malware 13 páginas
Troyanos y Backdoors 15 páginas
Troyanos y Backdoors: Demostración 06:13
Virus y Gusanos 10 páginas
Sección 5: Ingeniería Social
Introducción a la Ingeniería Social 4 páginas
Hacking con Buscadores 6 páginas
Hacking con Buscadores: Demostración 09:48
Robo de Contraseñas 11 páginas
Phishing 12 páginas
Phishing: Demostración 05:45
Sección 6: Guías para la Ciberseguridad
Guías para Usuarios 5 páginas
Principios de Seguridad 10 páginas
Sección 7: Contramedidas
Contramedidas contra Ingeniería Social 10 páginas
Marco de Compartición de Información 13 páginas
LINK: http://adsnet.info/yy7S
Aprende a protegerte de las técnicas que usan los cibercriminales para acceder a la información almacenada en una red.
En este curso aprenderás desde cero las técnicas que usan los cibercriminales para tomar el control de los sistemas. Esto te permitirá proponer contramedidas para mitigarlas y proteger tu red frente a ataques a la Seguridad de la Información.
Contenido:
Más de 250 páginas de información detallada y más de 3 horas de vídeo con demostraciones prácticas que podrás realizar en tu propio laboratorio.
Conceptos de Seguridad de la Información
Técnicas de hacking: sniffing, phishing, password cracking, Man in the Middle, criptografía, …
Contramedidas
Normas y estándares de Ciberseguridad
Laboratorios Prácticos
Todas las demostraciones que se hacen en el curso podrás realizarlas en tu propio laboratorio. Aprenderás a instalar y configurar el laboratorio utilizando herramientas gratuitas.
¿Cuáles son los requisitos?
Administración de sistemas Windows
Administración de sistemas Linux
Fundamentos de Redes
Direccionamiento IP
TCP/IP
¿Qué voy a aprender en este curso?
¡Más de 49 clases y 7.5 horas de contenido!
Conocer los fundamentos de la Ciberseguridad
Analizar las diferentes técnicas de ataque que usan los cibercriminales
Proponer contramedidas para los ataques estudiados en el curso
Planificar sistemas de seguridad en capas
Conocer los diferentes estándares relacionados con la Seguridad de la Información
Proponer medidas de seguridad para contrarrestar los ataques dirigidos a los usuarios
¿A quién está dirigido?
Administradores de Redes
Administradores de Sistemas
Cualquier persona interesada en introducirse en el mundo de la Seguridad de la Información y el Hacking
Sección 1: Introducción a la Ciberseguridad
Conceptos Fundamentales de Ciberseguridad 7 páginas
Conceptos Fundamentales de Ciberseguridad: Confidencialidad 04:05
Conceptos Fundamentales de Ciberseguridad: Integridad 05:15
Estándares y Normativas de Seguridad de la Información 7 páginas
Amenazas a la Ciberseguridad 10 páginas
Naturaleza del Ciberespacio 03:01
Incidentes de Ciberseguridad 10 páginas
Ciberseguridad 11:28
Ciberseguridad: Configurar el Laboratorio de Prácticas 07:56
Ciberseguridad: Vulnerabilidades 12:20
Ciberseguridad: Amenazas 08:31
Ciberseguridad: Ciberguerra 06:22
Sección 2: Introducción al Hacking
Footprinting y Reconocimiento 13 páginas
Escaneo de Redes 22 páginas
Escaneo de Redes: Zmap 09:32
Escaneo de Redes: Nmap 05:01
Enumeración 13 páginas
Enumeración: Demostración 07:14
Hacking del Sistema 13 páginas
Hacking del Sistema: Hackear Windows 8 12:28
Hacking del Sistema: Meterpreter 08:34
Hacking del Sistema: Eliminación de Registros 05:19
Sección 3: Protección de Datos
Sniffing de Red 8 páginas
Sniffing de Red: Sniffers 08:16
Sniffing de Red: ARP Spoofing 15:07
Sniffing de Red: MITM 07:30
Secuestro de Sesiones 4 páginas
SQL Injection 11 páginas
SQL Injection: Demostración 11:55
Data Leak Prevention 7 páginas
Anonimato y Deep Web 14 páginas
Criptografía 13 páginas
Criptografía: Demostración 12:13
Denegación de Servicio 11 páginas
Denegación de Servicio: Demostración 05:32
Sección 4: Malware
Introducción al Malware 13 páginas
Troyanos y Backdoors 15 páginas
Troyanos y Backdoors: Demostración 06:13
Virus y Gusanos 10 páginas
Sección 5: Ingeniería Social
Introducción a la Ingeniería Social 4 páginas
Hacking con Buscadores 6 páginas
Hacking con Buscadores: Demostración 09:48
Robo de Contraseñas 11 páginas
Phishing 12 páginas
Phishing: Demostración 05:45
Sección 6: Guías para la Ciberseguridad
Guías para Usuarios 5 páginas
Principios de Seguridad 10 páginas
Sección 7: Contramedidas
Contramedidas contra Ingeniería Social 10 páginas
Marco de Compartición de Información 13 páginas
LINK: http://adsnet.info/yy7S
Suscribirse a:
Entradas (Atom)