Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

8.6.11

Eres un quisquilloso vs código bien escrito

for(int i = 0; i < 10; i++) {
     //do something
}



Cuando escribo código y la mayoría de las veces escribo en C/C++ uso una convención de espacios, paréntesis y llaves muy cuidadosa. Alguna vez me han llamado quisquilloso pero la mayoría de las veces dicen pijotero.

Lo importante no es los espacios ni donde están las llaves ni nada de eso, hay muchas convenciones y hay "guerras" por estas cosas cada vez que uno abre la boca, hay un montón de estilos con sus propias reglas, el que yo uso se parece bastante a BSD KNF. Para saber mas lo mejor es mirar la wiki.

Lo importante es que de un solo vistazo sabes claramente si estabas escribiendo las cosas cuidadosamente o muy de prisa. Si era muy de prisa, es también muy probable que el error esté por ahí cerca.Espero que esto os salve la mitad de horas que me ha salvado a mi por lo menos

7.6.11

La sensación del tiempo infinito

Cuando estas programando te enfrentas a un monton de problemas, la mayoría son problemas del propio código o del software que se está intentando desarrollar, esos problemas al final se solucionan. Hay otros problemas que son mucho más complicados de definir y de solucionar. Aqui es donde llega "La sensación del tiempo infinito".

Es una sensación que tiene el programador cuando no avanza, cuando cree que tiene un montón de horas por delante y avanza muy lentamente. El dia va pasando y la solucion no llega, no estas realmente atascado en el código pero no tienes un incentivo real para ir más rápido.

Es probablemente la peor sensación a la que se puede enfrentar un programador. Al menos de las peores a las que yo me he enfrentado.

¿Como se soluciona esto?

La respuesta rápida es: no lo sé. La respuesta larga es lo que peor me sienta es el código repetitivo que no es un reto sino más bien "Book keeping" como le llaman los ingleses. Asi que paso 1: evitar el código repetitivo automatizando todo lo posible

Lo siguiente que peor me sienta es tenerme que pelear con el IDE, la librería o el framework en vez de con mi problema, esto realmente es horrible y la única forma de solucionarlo que conozco es conocer tu entorno, esto cuesta mucho porque por cosas de la vida cambias de IDE, de entorno y hasta de sistema operativo.

Finalmente usar una PDA (Papel de apuntar), todas las mañanas escribo una pequeña lista de 4 o 5 cosas que tengo que hacer y al terminarlas voy tachandolas, esto da la sensación de trabajo realizado y ayuda a ver como avanza el trabajo.

No todos los problemas se solucionan con un mejor algoritmo, algunos necesitan tener en cuenta al programador pero oye cuando funciona es casi arte.

8.3.09

libreria de cadenas de C (II)

strcmp: devuelve 0 si las dos cadenas son iguales, un numero menor que 0 si la segunda es "mayor" que la primera y mayor que cero si la primera es "mayor" que la segunda.

int
strcmp(char *s1, char *s2)
{
unsigned c1, c2;

for(;;) {
c1 = *s1++;
c2 = *s2++;
if(c1 != c2) {
if(c1 > c2)
return 1;
return -1;
}
if(c1 == 0)
return 0;
}
}

Lo interesante del código es que casi no necesita explicación, y seria bastante difícil hacerlo de una forma mejor o mas corta, solo si c1 es igual a c2 se pasará al segundo if, si además c1==0 también c2==0, es decir que las dos cadenas han terminado y son iguales.

Una curiosidad es que se suele poner el tipo que devuelve la función en una linea separada y así poder buscar mas fácilmente con grep.

La libreria de cadenas cd C (I)

Cuando aprendí a programar siempre me pedian que escribiera funciones de prueba que, compararan cadenas, copiaran cadenas etc. y siempre me pregunté como lo harian los que de verdad sabian o mejor dicho como lo harian las librerias del sistema.

Ultimamente me he estado pegando con plan9 y he visto el codigo de varias funciones de cadenas del sistema, asi que ahi va una explicación rapida.

strchr: devuelve un puntero a la primera posicion de ch si este está en s1, o NULL si no está.

char*
strchr(char *s, int c)
{
char c0 = c;
char c1;

if(c == 0){
while(*s++)
;
return s-1;
}

while(c1 = *s++)
if(c1 == c0)
return s-1;
return 0;
}
Lo primero es que si el carácter que estamos buscando es el carácter 0, esto es NULL (en C se pone un NULL al final de cada cadena) entonces lo único que hacemos es avanzar el puntero de la cadena hasta encontrar ese NULL.

Como se usa un post incremento s++, hay que devolver s-1 ya que s era NULL y además le hemos avanzado una posición mas.

En caso contrario se va avanzando el puntero de la cadena y a la vez asignándoselo a una variable que se compara con el carácter pedido, si aun así no se ha encontrado se devuelve NULL (0).

Éste código ha salido de plan9

3.10.07

Sobre la inteligencia artificial

Leyendo un manual sobre CLIPS, una herramienta para aprender sobre IA me encontre con la siguiente frase:

"The only prerequisite is that you have a basic knowledge of programming in a high-level language such as Pascal, Ada, FORTRAN, C (OK, BASIC if nothing else, but we won't admit it in public and will disavow this statement if asked.)"

"El unico prerequisito es que tenga unos conocimientos basicos de programacion en un lenguaje de alto nivel como Pascal, Ada, FORTRAN, C (Vale, BASIC, si no hay otra cosa, pero no lo admitiremos en publico y lo negaremos si alguien pregunta.)"

6.7.06

Java


A peticion de david que me ha dicho que como coño funciona java para empezar pongo un pequeño articulo

Que coño hay que hacer y por donde empezamos?

1. Hay que bajarse el jdk que es un kit de desarrollo para java, de donde? pues de la pagina de sun pero como se que todos somos muy vagos pongo por aqui el enlace a la pagina de java

2. Nos bajamos un editor de codigo como el Scite y si eres un poco veloz te daras cuenta de que he puesto un bonito enlace este ademas es libre asi que mola mas

3. Escribimos un cacho de codigo cutre como este:


public class HolaMundo {
public static void main (String [] args) {
System.out.println("Hola Mundo");
}
}

4. Guardamos el cacho cutre este como HolaMundo.java tiene que llamarse igual que el nombre de la clase asi que no rechisteis

5. Escribimos en una ventana de consola javac HolaMundo.java esto compila el programa

6. Escribirmos en otra ventana de consola java HolaMundo que ejecuta el programa

7. Mierda los ultimos 2 pasos no funcionan porque? porque no esta apañado el path asi que si estas en windoze te metes en mi pc y agregas la ruta c:\Archivos de programa\Java\jdk1.X.X\bin y repites el paso 5 y 6


En los casos arduos y dificultosos, en un mismo punto han de andar el consejo y la obra. Consejo Don Quijote

4.6.06

Otro examen mas...

Con motivo de mi examen de blp he decidido poner una frase que representa el sentimiento que me produce aunque lastimosamente solo lo entenderan los que lo han sufrido en carne propia para el resto la pagina original mucho mejor por otra parte:

El caballero decide matar al dragón con una expresión regular,
pero se equivoca en los caracteres de comodín y acaba incluyendo en el patrón de mortalidad a Dragones, Iguanas, lagartos, perros, gatos, osos, princesas y ratones.

Como matar a un dragon programando en diferentes lenguajes

7.7.05

Tutoriales


Pues eso que he encontrado apuntes en papel que tenia sobre cosas de como programar con las librerias de GNU/Linux y he decidido hacer 3 pequeños tutoriales, con lo cual los dejo aqui para el que los quiera ver que los vea y los que quieran aportar para mejorarlos tambien ayudaria bastante.

Capitulo1 - Averiguando la ruta de nuestro ejecutable
Capitulo2 - Obteniendo informacion del S.O
Capitulo3 - Leer una sola tecla de la consola

Recomendacion y/u/o nota darle a bajar y los veis ya bajados porque el lugar donde esta el hosting tiene la mala costumbre de convertir los caracteres acentuados y eñes en popurris indescifrables.

Espero ir poniendo otros tutoriales de vez en cuando pk a la que los escribo aprendo yo mucho tambien

3.7.05

Mono!!!


MonoDevelop

Para los que no lo hayais probado todavia esto es MonoDevelop, un entorno y arquitectura libre para .NET que a mi me tiene impresionado, no he tenido mucho tiempo todavia para probarlo pero tiene muuy buena pinta, y los programas que haces son portables, linux, windows, mac os x, etc esta genial la pagina desde donde se puede bajar es: http://www.mono-project.com/Downloads y tambien hay una version para windows

18.3.05

Python

Si has visto el .NET y crees que es el futuro... (en clase tenemos muy claro que no), si crees que Java va a solucionar los problemas del mundo (no comments) y no sabes que es o solo has oido cosas de Python sin utilizarlo....

Hecha una ojeada aqui: extrayendo metainformacion de archivos en una sola pagina de codigo pasa todo lo que parece....

Yo sigo impresionado: tutorial entero de python

Al principio parece algo complicado porque ponen todo el codigo de golpe pero una vez se avanza se van simplificando las cosas