La contundente verdad de la programacion.

Es muy comun encontrar gente intentando aprender por si mismos Java, C# o algun otro lenguaje, a veces incluso por necesidades de las universidades.

Y muchas veces lo necesario en estos casos es escapar de los enormed IDEs, cojer un SO que puedas ver como esta hecho y compilar un fichero en C. Despues leer algun libro de C, como K&R. Aprende a usar los Makefile. Aprende a hacer un analisis estatico de ese programa que has hecho.

Aprence un lenguaje de script, haz algun script que haga algo util desde la linea de comandos. Aprende a usar las herramientas de UNIX, lo que significa cat, sed, uniq, sort, grep, touch, ls, ln, find… Aprende a usar los hilos
Escribe un poco de ensamblador, y luego consigue ejecutarlo desde tu codigo en C creado antes.

Lee un libro de algoritmos e implementa una lista linkada y otras estructuras. Aprende a usar git, entender todos sus comandos y sube todo tu trabajo al repositorio. Involucrate en distintas comunidades de desarrollo, lee sus listas de bugs, y reporta los bugs que encuentres. Encuentra un bug sencillo de arregla e intenta que te acepten tu parche.

Ahora estas listo para aprender a programar.

Anuncios

SOLID

Principios SOLID

 

El Principio de Responsabilidad Única (SRP) nos dice que una clase sólo debe tener una única razón para cambiar. Es decir, una clase solo debe ocuparse de un trabajo, y todo lo que contenga debe estar orientado a ese propósito. Si una clase se esta ocupando de calcular unos presupuestos, guardarlos y mostrarlos estaríamos haciéndolo mal puesto que esa clase se estaría ocupando de 3 trabajos totalmente distintos.

El Principio de Abierto-Cerrado (OCP) nos indica que nuestras clases estan abiertas para extender pero cerradas para modificar. Lo cual puede parecer una contradiccion en un principio tiene sentido al entenderlo.
Asi pues nuestras clases deben permitir añadir funcionalidades para cumplir los nuevos requisitos pero estar cerradas para modificar lo que ya esta escrito, para ello nos valemos de las interfaces o de los metodos o clases abstractas.

Como ejemplo podriamos ver que si necesitamos comprobar si el presupuesto anterior es de una compañia o de un particular tenemos los formas, la incorrecta seria crear la condicion dentro del metodo de calcularPresupuesto puesto que incumpliriamos el principio OCP, el metodo correcto seria añadir una o dos lineas donde se añada una llamada a una interfaz que sera la responsable de gestionar esta condicion.

El Principio de Substitución de Liskov (LSP) se centra en los conceptos de encapsulación y cohesión, diciendo que las clases que hereden de otras no deben extralimitarse en sus comportamientos, deben implementar o ampliar la informacion que reciben de sus padres pero no violar las funciones de su padre, un ejemplo tipico lo tenemos con una clase rectangulo y su hijo circulo, el circulo asume que su altura y su anchura seran iguales pero si se usa la clase circulo en un contexto donde se esperaba un rectangulo fallara porque las dimensiones de un circulo se habran programado para no poderse modificar por separado.

El Principio de Segregación de la Interfaz (ISP) nos habla de como las clases no deben exponer interfaces que las aplicaciones que las usan no necesitan. Es decir, solo deben tener lo minimo que vayan a usar, si tenemos una clase para unos presupuestos, en vez de usar una sola interfaz que nos diga que metodos podemos usar, es mejor tener varias interfaces con por ejemplo una los metodos de las compañias, otra interfaz con los metodos de los particulares…

El Principio de Inversión de Dependencias (DIP) define que los modulos de alto nivel no deben depender de los de bajo nivel, deberian de depender de las abstracciones e interfaces que vamos creando, y estas abstracciones no deben depende de los detalles, sino a la inversa. De esta forma podremos probar las cosas por separado, ya sea una base de datos, un nuevo plugin o modulo para nuestro sistema…

Android

Empezamos un nuevo tema como es la programacion en Android, esta a punto de publicarse la version 4.1 de Android llamada Jelly Bean, y en Eclipse han cambiado alguna cosas con esta llegada, como unos archivos llamados styles que se situan en las carpetas:

values:             Este style sera usado por defecto por si no existe ningun otro style creado.
styles.xml

values-v11:    Este style sera usado en moviles con android 3.0(API 11)  o superior, o si hay un values-v14 este style solo se usara desde la v3.0 hasta la v3.2
styles.xml

values-v14:    Este style sera usado en moviles con android 4.0(API 14) o superiores
styles.xml

Capitulo 2. Tipos de datos, variables y operadores.

Tipos de VariablesEn todos los lenguajes de programación se debe inicializar al inicio de cada programa todas las variables que se vayan a usar, o bueno no es obligatorio hacerlo al principio pero yo creo que quedan mas visibles al inicio que desperdigadas por todo el código. Las variables son necesarias en cualquier programa, ya sea para que el usuario introduzca algo por teclado o para modificar su valor en alguna ecuación, los tipos mas básicos que se usan son los siguientes:

  • byte. Su rango esta comprendido entre -128 y +127. Se utiliza 1 byte para almacenar un dato.
  • int. Su rango esta comprendido entre -2147483648 y +2147483647. Dato de 32 bits de longitud. Se usa para almacenar casi cualquier numero entero.
  • short. Su rango esta comprendido entre -32768 y +32767. Dato de 16 bits de longitud.  Almacena números pero de menor tamaño que los almacenados por int.
  • long. Su rango esta comprendido entre -9223372036854775808 y +9223372036854775807. Dato de 64 bits de longitud. Sirve igual que el int pero para mayores valores.
  • char. Su rango esta comprendido entre 0 y 65535. Este rango es para representar números en unicode, los ASCII se representan con los valores del 0 al 127. Solo se usa para letras.
  • float. Tiene una precisión de 7 digitos. Se usa para almacenar números con decimales.
  • double. Tiene una precisión de 16 digitos. también para decimales y algunos programas compilandolos con el Geany daran error si son float y no double, por lo que conviene que cualquier variable decimal la pongáis como double para evitaros esos errores.
  • boolean. Unicamente almacena dos valores, verdadero o falso. Util por si se quiere evaluar una condicion y ver si es verdadera o falsa.

Algunos ejemplos para estas inicializaciones de variables serian las siguientes: Int edad=12; double decimal=3.24; char letra=’a’ ; char letra=23 … siempre teniendo en cuenta que hay que poner ; después de cada inicialización o , si vais a inicializar varias en una misma línea, aunque las convenciones establecen que lo mejor es una por línea para poder comentarlas mejor y decir para que sirven, para esto también conviene que las variable lleven un nombre reconocible y no llamar nunca a una variable “variable1”,”variable2”….pues después no tendrías forma de saber para que es cada una. Tipos de Operadores Operadores Aritméticos Los primeros operadores que veremos son los aritméticos, que se usan para las operaciones matemáticas, los pongo con ejemplos numéricos pero tened en cuenta que esos números se pueden cambiar por variables y el programa haría las operaciones con los valores que tuvieran esas variables.

  • 2 + 2 –- Suma
  • 2 – 2 -– Resta
  • 2 * 2 –- Multiplicación
  • 2 / 2 –- División
  • 2 % 2 -– Resto de una división entera

Operadores Relacionales Con estos operadores se mira si un numero es mayor, menor o igual que otro.

  • 2 < 3 -– 2 es menor que 3
  • 2 > 3 -– 2 es mayor que 3
  • 2 <=3 -– 2 es menor o igual que 3
  • 2 >= 3 –- 2 es mayor o igual que 3
  • 2 != 3 –- 2 es distinto que 3
  • 2 == 3 -– 2 es igual que 3

Como veis algunas de estas condiciones no se cumplen, por ello se podría poner una variable booleana y comprobar si son verdad o mentira y que el programa nos lo mostrara por pantalla. Operadores Logicos Usados en las operaciones lógicas, nos dicen como será el valor de una expresión.

  • 1 && 2 o 1 & 2 — 1 AND 2. El resultado sera true si los dos operadores son true y false en caso contrario.
  • 1 || 2 o 1 | 2 — 1 O 2. El resultado sera false si ambos operadores son false y true en caso contrario.
  • !1 — Not 1. Si el operando es true el resultado es false, y viceversa.
  • 1 ^ 2 — 1 XOR 2. El resultado sera true si un operando es true y el otro false, y false en caso contrario.

Decir que en los dos primeros casos siempre uso la doble notacion, es decir, && y || para no confundirme con los operadores de bits que veremos mas adelante. Operadores unarios o unitariosEstos operadores como su nombre indican solo necesitan de una variable.

  • ~A — Complemento de 1 a A
  • -A — Cambio de signo del operando
  • A– — Decremento de A
  • A++ — Incremento de A
  • !A — Not A. Funciona de igual forma que el visto arriba con el !1

Operadores de BitsUnicamente aplicables en la manipulacion con bits.

  •  A & B. AND logico. A AND B.
  • A | B. OR logico. A OR B.
  • A ^B. XOR logico. A XOR B.
  • A << B. Desplazamiento hacia la izquierda de A B bits rellenando con ceros por la derecha.
  • A >> B. Desplazamiento hacia la derecha de A B bits rellenando con el BIT de signo por la izquierda.
  • A >>> B. Desplazamiento hacia la derecha de A B bits rellanando con ceros por la izquierda.

Operadores de asignacionEstos aunque son los ultimos son bastante importantes pues sin ellos no se le podria asignar ningun valor a las variables.

  • A = B — Asigna el valor de la derecha a la variable de la izquierda.
  • A *= B — Multiplica y asignacion. Equivaldria a A=A*B
  • A /= B — Division y asignacion. Equivale a A=A/B
  • A %= B — Modulo y asignacion. Equivale a A=A%B
  • A += B — Suma y asignacion. Equivale a A=A+B
  • A -= B — Resta y asignacion. Equivale a A=A-B

Con esto terminamos el apartado de operadores y como apartado final de este capitulo solo añadire las conversiones de tipos, aunque yo todavia no las he usado. Hay dos formas de conversion, la implicita y la explicita.

  • En la implicita la conversion se realiza de forma automatica pero requiere que la variable destino, la de la izquierda, tenga mas precision que la variable origen, la de la derecha.Ej: byte dato1 = 3; short dato2=5; dato2=dato1;
  • En la conversion explicita el programador fuerza la conversion mediante una operacion llamada cast con el formato (tipo) expresion. Ej: bdato = (byte) idato donde bdato es una variable byte y idato es una variable int

Aun asi el libro recomienda evitar las conversiones en la medida de lo posible, puesto que en metodo explicito puedes perder informacion en algunos casos.

Instalando Archlinux 2011.08.19

Hago esta guia principalmente para complementar la guia de la wiki de Arch, que aunque suele servir en muchos casos, en otros hay demasiada informacion que no es necesaria o tardas en buscar el paso por el que estas, aparte este blog lo cree en un principio para ir apuntando las cosas al instalar Arch, y luego si me toca reinstalarlo o explicarlo no tener que volver a buscar toda la informacion y tenerlo todo organizado con la solucion de los problemas que tuve y todos los posibles fallos, pero bueno empecemos:

Para este tutorial he escojido la imagen core dual, pues asi la puedo grabar en un disco y llevarla con unos cuantos discos que tengo de mantenimiento e instalacion de diferentes sistemas, para descargar la imagen podeis hacerlo desde aqui, y luego desde ahi o elegir una version netinstall para poder instalar lo mas actualizado de cada cosa a través de internet o la versión core para poder instalarlo desde los archivos del CD, lo cual viene bien cuando no tienes acceso a internet, aunque desde la core tambien puedes instalarlo como si fuera netinstall y tener lo mas actualizado de cada cosa.

Usando Archlinux 2011.08.19 core dual

Leer más de esta entrada

8 razones por las que usar Archlinux


  1. La filosofía de Arch.
    Su filosofia denominada KISS(Keep It Simple, Stupid!), hace referencia a eso, a un diseño basico y minimalista, lo que muchas veces echara hacia atras a algunos usuarios, pero en beneficio, podras usar tu sistema para lo que desees, y saber lo que contiene. Por cierto se me olvidaba, por si alguien no entiende la traduccion de KISS quiere decir “Mantenlo simple, estupido!”
  2. Nunca necesitaras reinstalar de nuevo. Unicamente necesitaras instalar Arch una vez, pues es rolling-release, lo cual significa que cada dia podrias estar actualizando tus programas, y unicamente ejecutando pacman -Syu tendras todo tu equipo al dia, olvidandote asi de todos los problemas que suceden cuando actualizas por ejemplo en Ubuntu de una version a otra y no hacen mas que salir fallos y al final optas por una instalacion limpia de la siguiente version.
  3. Configura tu ordenador a tu gusto. Uno de loa grandes beneficios de esta distribucion es que al solo venir de base con una consola puedes instalar unicamente lo que tu quieras, cambiar las configuraciones y saber todo lo que pasa en tu ordenador
  4. Archlinux aplica menos parches (siempre podrás compilarlos y aplicarlos tu mismo) que el resto de distribuciones GNU/Linux (incluida Debian). De esta forma las aplicaciones funcionan tal y como han sido programadas por desarrolladores.
  5. Gran variedad de drivers disponibles en los repositorios oficiales, incluidos propietarios. Prácticamente todo el hardware funcionará perfectamente en Archlinux.
  6. No es necesaria la activación del software. Al contrario que en Windows aqui todo sera libre y no tendras que preocuparte de los cracks, ni medicinas, unicamente pacman -S [paquete a instalar] y listo.
  7. Archlinux funciona en cualquier ordenador. Mientras tu ordenador sea un Pentium podras instalar Arch, seguramente algun modelo anterior tambien funcionaria pero es por poneros un ejemplo. Y esto pasa por lo mismo que decia antes, de que solo trae una consola instalada, pudiendo si se quiere trabajar unicamente sobre la consola y asi no consumir casi recursos
  8. Todos los dias aprenderas algo. El primer dia de instalacion de Arch es un curso intensivo de linux y mas si nunca has tocado otra distribucion, pensaras “¿En que me estoy metiendo..?”, y todos los dias te tocara aprender algo nuevo, tendras que aprender los comandos basicos de la consola(en esto ayuda bastante los cheat-cube, ya los veremos en otro post), tendras que modificar los ficheros de configuraciones, con lo que tu curva de aprendizaje se vera aumentada exponencialmente, si por el contrario no te gusta aprender yo te recomendaria que pasaras de las distros de linux pues en todas te surge algun problema por lo menos cada semana y tienes que tener las ganas de aprender como reparar esos fallos.
Y bueno estan son algunas de las razones, pero no quiere decir que no haya mas o depende de como uses tu el ordenador no puedas ver mas razones. Yo usare este blog principalmente para poner lo que voy aprendiendo de Arch, y para que la gente encuentre una forma rapida de empezar con esta gran distribucion. Tambien queria comentaros que mucha gente empieza en el mundo de Linux por Ubuntu, luego pasa a Debian y termina con Arch, habiendo tenido un año o dos cada distro, pero no pasa nada si das el salto a Arch, yo por ejemplo, estuve con Ubuntu unos 3 o 4 meses, en los cuales tuve una semana Debian, y me pase a Arch hace poco, si que me costo mas aprender todos los comandos, y no entendia la mayoria de las cosas, no habia trabajo nunca sobre consola, siempre las evitaba, pero segun le vas perdiendo el miedo, te acostumbras y ves que es una gran distribucion.
Si teneis algun tipo de problema o algo no dudeis en comentarmela.