Programaci on computacional advenediza en la ingenier...

35
Programaci´on computacional advenediza en la ingenier´ ıa Ludger O. Su´ arez-Burgoa (PhD.) Profesor Asistente en dedicaci´ on exclusiva Facultad de Minas – Universidad Nacional de Colombia 21 de abril de 2016 1

Transcript of Programaci on computacional advenediza en la ingenier...

Page 1: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Programacion computacional advenediza en laingenierıa

Ludger O. Suarez-Burgoa (PhD.)

Profesor Asistente en dedicacion exclusivaFacultad de Minas – Universidad Nacional de Colombia

21 de abril de 2016

1

Page 2: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Resumen

Esta presentacion tiene el objeto de persuadir al estudiante yprofesional ingeniero a que se convierta en un programador amante(amateur) no necesariamente profesional para que pueda cubrir lademanda actual y en crecimiento de crear sus propias herramientasde calculo.

El proceso de aprendizaje para la programacion computacional esun proceso similar al aprendizaje de cualquier arte y las matematicas:necesita paciencia y perseverancia en las primeras etapas y luego muchapractica, pericia y perfeccionamiento.

Si bien por lo general, no se puede seguir un curso deprofesionalizacion paralelo a las ingenierıas a nivel de pregrado, elmetodo de aprendizaje advenedizo es una importante alternativa paraformar al ingeniero con las capacidades de programacioncomputacional.

Page 3: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Mi paso por los lenguajes de programacion.

Epoca del colegio:

1988 (colegio) por primera vez vi un computador, la Commodore 64;

Page 4: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

(a) Commodore 64, se instala a untelevisor.

(b) Lector de datos de la Commodore 64,con casete.

Page 5: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

1989 lenguaje LOGO en cursos escolares de extension (the turtle scriptlanguage);

Page 6: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Las siete funciones del lenguaje de la tortuga.stand by

go formward n steps

go backward n steps

pen up

pen down

turn left n degrees

turn right n degrees

En la implementacion del lenguaje de la tortuga a un robot:

las funciones segunda y tercera se puede cumplir con un motor depaso con alternancia de polaridad aplicados a las llantas del robot;

las funciones sexta y septima se puede cumplir moviendo una solarueda del par de ruedas de desplazamiento del robot;

las funciones cuarta y quinta se puede cumplir con un la subida obajada de un marcador en el centro de giro del robot.

Page 7: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

El lenguaje LOGO se usa mucho para ensenar a los ninos a pensarrecurrentemente Think Recursively!. Por ejemplo, para dibujar uncuadrado de 100 unidades (e.g. pixeles), si uno no piensarecurrentemente el pseudo codigo serıa

1. Calcule las cuatro coordenadas de los vertices que define elcuadrado.

2. Una cada par de coordenadas mediante una lınea.

Sin embargo, si uno usa el pensamiento recurrente y lo implementa enel lenguaje de la tortuga, entonces en pocas lıneas de codigo el cuadradose lograrıa del siguiente modo.

for [1..4]

pen purple , 2

fd 100

rt 90

Page 8: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

1990 lenguaje Basic (procedimental con el uso de la sentencia GOTO);

1992 a 1993 lenguaje Turbo Basic, estudio a cuenta propia (procedimental);

Page 9: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

1992 a 1993 paralelamente usuario de la calculadora Casio FX 7700G.

Page 10: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

1992 a 1993 paralelamente usuario del programa Derive.

Page 11: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Epoca de la universidad (pregrado):

1995 (pregrado) : Turbo Pascal, materia de ingenierıa de sistemas(procedimental sin sentencia GOTO).

Page 12: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

1995 a 2000 (mayor parte de pregradp) : hojas de calculo Quattro-Proy Excel, no son lenguajes de programacion;

1995 a 2000 : programacion en la calculadora Hewlet-Packard;

Page 13: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

1995 a 2000 : Autocad, versiones 2.62, 11, 14 y 2000 con el lenguaje deprogramacion AutoLisp;

1995 a 2000 : Golden Software Surfer e Idrisi + Toscanelli;

Page 14: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

2001 (tesis de pregrado) : Visual Basic bajo Windows 2000;

Page 15: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

2001 a 2006 (trabajo) y 2006 a 2008 (postgrado Maestrıa) :MS-Office, Autocad V. 2000, Surfer V.8, GeoSlope Office;

Page 16: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

2009 a 2012 (postgrado Doctorado) : LaTeX y Matlab V.11 (paradigmaprocedimental) bajo sistema operativo Windows XP;

Page 17: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

2012 a 2013 (profesor) : LaTeX y Matlab V.11 (paradigmaprocedimental) bajo sistema operativo Linux (Debian y Ubuntu);

2014 (profesor) : LaTeX y Matlab V.11 (ano del desencanto);

2015 (profesor) : LaTeX y Python 2.7.X (paradigma funcional).

2016 (profesor) : XML+CSS+NISO-JATS+MathJAX y Python 3.X(paradigma orientada a objetos).

Page 18: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,
Page 19: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

1. La segunda decada del siglo XXI

Algo que se ha persivido desde la segunda decada de este siglo es laexplosion global en el interes de estudiar ciencias computacionales; y porende una fuerte demanda para la ensenanza de esta disciplina.

Page 20: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

0

500

1000

1500

2000

2500

total

CS 106A

CS 105

CS 101

(c) Stanford.

0

200

400

600

800

1000

1200

total

6.01

6.00

(d) MIT.

Figura 1: Incremento en la demanda de estudiantes en estudiar cienciascomputacionales [?].

Page 21: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

2. El futuro del trabajo esta en la capacidad

de hacer programas computacionales

La proyeccion de los trabajos del 2012 a 2022 indica que el 71 % de lostrabajos en ciencia, tecnologıa, ingenierıa y matematicas (STEM, delacronimo en Ingles de Science, Technology, Engineering and Math) seranocupados por profesionales de las ramas computacionales; que el 51 % de lasplazas de trabajo disponibles y abiertas en las STEM seran ocupadas porprofesionales de las ciencias computacionales.

Page 22: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

El numero de graduados en EE.UU. va incrementando con los anos [?].

0"

10,000"

20,000"

30,000"

40,000"

50,000"

60,000"

70,000"

1966

1970

1975

1980

1985

1990

1995

2000

2005

2010

2012

Page 23: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Por otro lado, se proyecta que para el 2020, la carencia de capacidadesen programacion computacional resultara en un deficit de 900 000 trabajos(Steinberg, referenciado por [?]).

Page 24: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Por ejemplo en la Union Europea el sector privado y publicoesta actualmente buscando personas jovenes, pequenos empresarios para serentrenados en programacion computacional. Pero el interes en laprogramacion va orientado hacia el desarrollo de paginas web, comercioelectroncio, mercadeo digital. Es decir, todo suenan con el trabajo ideal deganar mucho con solo un aplicativo web, como lo hace www.amazon.com porejemplo.

Pero lo que se esta buscando capacidades digitales (digital skills) en losprofesionales actuales. Sin embargo, la tarea de ensenanza no es facil. Setiene que ensenar a las personas a que adquieran las siguientes capacidadesdel pensamiento computacional.

Page 25: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Digital skills

Todo individuo de la ciudad necesita tener una facilidad en el pensamientocomputacional, que implica:

analisis de problemas;

descomposicion de problemas y refinamiento a pasos;

abstraccion;

pensamiento algorıtmico y expresion algorıtmica;

aislamiento de fallas a pasos (debugging ;

modelamiento.

https://gym.pencilcode.net/draw/#/draw/first.html

Page 26: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Ciencias computacionales

Las ciencias computacionales estudian las formas de encontrar losprocedimientos sistematicos que garanticen la correcta solucion a un dadoproblema. Estos procedimientos se llaman algoritmos.

Page 27: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Programacion advenediza

Advenedizo (adj. y s) Que llega a una posicion que no le corresponde o aun lugar en el que le consideran extrano.

Programacion advenediza Metodo de programacion que usa los recursosen lınea de la red Internet para resolver problemas y para desarrollarcodigos computacionales. Su principal caracterıstica es que sea unmetodo que posibilite el desarrollo rapido y facil de software;comparando con los codigos robustos de difıcil mantenimiento que sedesarrolla si esta metodologıa.

Page 28: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Programacion advenediza

En le futuro, la programacion computacional sera menos de conocer comohacer una tarea, y ser mas de como encontrar la respuesta correcta.

Por esta razon estan evolucionando entornos de desarrollo de programasque no requieran gran entrenamiento del usuario; por ejemplo, en Ubuntu setiene el programa quickly que se instala con

sudo apt -get install quickly

para el desarrollo de software en el lenguaje Python para Linux. Estaherramienta juntamente con Lauchpad es una herramienta que ayuda a lagente y a grupos de personas a trabajar en comun en proyectos de software.

Page 29: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Reutilizacion de los codigos computacionales

Serıa interesante de entender mejor como los programadores usan suspropios codigos en otros proyectos.

Se reporta que es un gran deseo entre los programadores de mejorar lascapacidades en la Reutilizacion de codigos. Hasta el momento no se ha vistotal forma de explotar al cien por ciento el reuso de los codigos; esto por lafalta de organizacion, cambios en las librerıas de software y cambios en losambientes de ejecucion [?]Brandt.etal2008.article.

Page 30: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

El pensamiento recurrente

La recurrencia es el proceso de repetir acciones en una similar forma yal mismo proceso. En ciencias de la computacion, la recurrencia se refiere aun metodo de solucionar problemas computacionales; donde uno define unafuncion y esta se vuelve a aplicar a sı misma varias veces hasta encontrarla solucion mas simple, y a partir de esa solucion simple armar la solucioninicial.

Muchos problemas complejos se resuelven de forma recursiva mediantealgoritmos sorprendentemente concisos, faciles de entender, y eficientescomputacionalmente. Sin embargo, para el novato que ve por primera vezuna solucion recursiva, resulta ser oscuro, difıcil, e inclusive mıstico.

Debido a que el pensamiento recurrente no forma parte de nuestropensamiento cotidiano, este pensamiento es poco familiar y requiere uncambio de paradigma.

Page 31: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Solucion recurrente

La decision para usar la recurrencia esta sujeto por la naturaleza delproblema. Para que un problema sea un apropiado candidato para unasolucion recurrente, el problema tiene que tener las siguientes trespropiedades.

1. Tiene que se posible descomponer el problema original en instanciasmas simples del mismo problema.

2. Una vez cada uno de estos menores problemas se hayan solucionado,tiene que ser posible combinar las soluciones para armar la solucion delproblema original.

3. Cuando el problema original se divide en los problemas menores, estosmenores problemas tienen que eventualmente convertirse en unproblema tan sencillo que se puede resolver sin ninguna mayorsubdivision.

Page 32: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Con un problema con estas caracterısticas, la solucion recursiva sigue unaforma directa.

1. Vea si el problema entra en la categorıa del caso mas simple. Si entra,entonces el problema se resuelve de forma directa. Si no entra, elproblema entero se divide en nuevos problemas menores, cada uno quese soluciona por medio de un procedimiento que involucra subdivision.

2. Ensamble cada problema menor para formar la solucion del problemaoriginal.

Para alguien que esta aprendiendo la solucion recurrente, es complicadocreer que esta estrategia general sea lo suficientemente potente para resolverun problema complejo; y lo que opta por lo general es insistir en ver unasolucion en todo su cruento detalle.

Page 33: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

En pseudocodigo serıa [?].

1: procedure Solve2: if is easy then3: solve problem directly.4: else5: break this into new instances I1, I2, . . . In6: solve I1, I2, . . . In7: resemble the solutions

Los problemas tıpicos para solucionar con metodos recurrentes son:

factorial de un numero;

interes compuesto;

la torre de Hanoi;

Page 34: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Por ejemplo, el siguiente listado muestra la solucion recursiva del factorialde un numero.

function [ x ] = factorial( n )

if n == 0

x = 1;

else

x = n * factorial( n - 1 );

end

end

Puede observar en el codigo que la funcion factorial tiene un caso simpleque es el factorial del cero 0!; y que el factorial de un numero mayor a ceropuede ser reducido al caso simple calculando sucesivamente el factorial de unnumero menor cada vez.

La solucion recurrente tambien se llama algoritmo D&C (Divide andConquer).

Page 35: Programaci on computacional advenediza en la ingenier ageomecanica.org/publications/files/present_files/programacionAdven… · Para alguien que est a aprendiendo la soluci on recurrente,

Enlaces de interes

https://www.codefellows.org/learn-to-code

https://code.org/educate