miércoles, 31 de diciembre de 2014

Computacion como profesion

​​
Estimados, 

les adjunto un articulo super interesante que acaba de ser publicado en ACM y que tiene que ver directamente con nuestra profesion: Computacion.

Computing: an emerging profession?

Author:Stephen SeidmanTexas State University, San Marcos, Texas
Published in:
Cover Image
· Magazine
ACM Inroads archive
Volume 5 Issue 4, December 2014
Pages 6-11 

Aqui algunas frases que destaco pero vale la pena leerlo por completo.
  • To use a software engineering metaphor, program accreditation can be seen as “validation and verification” of an academic program. It answers the following two questions:
    • Does the name of a program correspond to its nature?
    • Does the program have sufficient quality?
  • When computing emerged as a recognized academic discipline in the 1960s, it came in multiple flavors: computer engineering arose from electrical engineering (circuits, processors, instruction sets), computer science had roots in mathematics (algorithms, theory of computation, numerical analysis),and information systems supported business applications
  • Aqui recuerdo que hace poco tiempo, en una universidad, un docente dijo que Sistemas de Infromacion no se trataba de hacer software (porque lo que buscaban era justificar Ing de SW) y yo dije que Sistemas de Informacion se trataba de hacer software para organizaciones. El resultado es que me acusaron de difamacion tomando como base esa afirmacion mia.Aqui hay otra persona a quien podrian acusar por publicar esto en un articulo de alcance mundial. El dice:This is emphatically not the case in the US and Canada, where computing is not included under the engineering umbrella.
  • Peru tambien es mencionado en el articulo pues el autor ya estuvo aqui algunas veces y se llego inclusive a tener reuniones con el CIP (Juan Fernan Munoz) tratando de entender esta idea confusa que propone el CIP con relacion a meter computacion dentro sin saber justificar esta propuesta mas alla de que hay una palabra en comun....
  • Luego viene una seccion completa que titula: Software Engineering: Forerunner or Cautionary Tale (Ingenieria de Sotware: Corredor delantero o cuento aleccionador).
    Vale la pena ver la definici'on que dio origen al termino Ing de Software: establishment and use of sound engineering principles to obtain economically software that is reliable and works on real machines efficiently.”
  • Luego dice: "It clearly has roots and affiliations in computer science, but its name and associations suggest an affiliation with engineering".
    Mas claro que el agua. Esto es como cardiologia y medicina.
  • En el proceso de acreditacion de ABET existe la comision de acreditacion de Ingenieria (EAC) y la de Computacion (CAC). En el articulo menciona que: "The program evaluators visiting a software engineering program are appointed by CSAB, but the team chair is a member of the EAC".
    Esta claro qeu quienes evaluan un programa de SWE son gente de Computacion y no ingenieros.
  • Engineers Canada has trademarked (registrado) the words “engineer” and “engineering” [3]. When Memorial University of Newfoundland attempted to offer an undergraduate degree in software engineering, the university was sued (demandada) by Engineers Canada.
    Esta es una buena idea para el CIP cosa que nadie mas que los miembros del club podrian utilizar dicha palabra (solo los que estan al dia claro y si no pagan les aplican la ley y asi protegen a los puntuales).
  • Fijense tambien qeu indica que un aprox de 40 estados en EEUU actualmente han creado examenes para licenciar (noten que esta es la razon de la palabra licenciado-> alguien que tiene licencia) a profesionales en Ingenieria de Software.
    Tambien menciona el numero exacto de personas que hay tomado este examen: 16 (dieciseis exactamente) y luego tambien menciona que son 1000 con el estandar internacional. Cuantos seran peruanos?
    Indudablemente no se trata de ningun tipo de tendencia a nivel mundial.
    Tambien indica queeste numero se debe a que este examen involucra conocimientos comunes a todo ingeniero: mecanica de fluidos, resistencia de materiales, electricidad, magnetismo y termodinamica.
    Que opinan los defensores de esta tendencia (nula) a nivel mundial? 
  • Aqui hay otra frase super interesante: The resulting Certified Software Development Professional (CSDP) examination was first offered in 2002. Note the deliberate avoidance (evasion) of the words “engineer” and “engineering.”
    Me pregunto si esto es lo que harian en Peru?
  • Aqui una frase muy fuerte pero muy real:
    Finally, there has not yet been any pressure from industry to hire software engineers with formal academic background in software engineering.
    En el Peru tampoco existe esa presion  de parte de la industria pero el CIP trato de crearla a traves de la ley. Como no es real pues la gente la ignora simplemente.
Indudablemente estamos frente a algo de velocidad incomparable con otras disciplinas ... crecio muy rapido y afecto todo lo que el ser humano hace en la actualidad.

La velocidad de esta disciplina es requiere que cada uno de nosotros le dediquemos un tiempo para entender la naturaleza de la misma y requiere tambien que estemos dispuestos a reaprender los conceptos que ya teniamos acunados en nuestras mentes.

Saludos
er

martes, 30 de diciembre de 2014

BBVA (Tratamiento de excepciones)

Holas,

Sobre este asunto de excepciones no atrapadas del BBVA que envie hace algunos dias ... (ver excepcion al final de este email) me gustaria hacer un comentario en voz alta que suelo hacer a mis alumnos ...

Todo programa debe tener un catch en el nivel mas alto de codigo que este bajo nuestro control y de esa forma evitar que la excepcion siga subiendo hasta el Sistema operativo y termine en algo asi. de feo en la pantalla del usuario.

Tambien es necesario siempre prestar atencion a la documentacion de las librerias que se utiliza pues si ahi dice que puede lanzar una excepcion hat que ponerle su try/catch siempre.

Sin embargo, con respecto al tratamiento de la excepcion hay varios niveles que me gustaria comentarlos de manera informal.

Nivel 1.- La excepcion es lanzada y el codigo nuestro no la atrapa entonces sigue subiendo hasta el nivel del Sistema Operativo y termina apareciendo en la pantalla del cliente y el desarrollador jamas se entera del problema sucedido.
Esta es la peor situacion.

Nivel 2.- El codigo tiene un catch y muestra un mensaje de error amigable al usuario pero los detalles internos (como el stack) no se muestran.
Esto esta mejor que el anterior pero los desarrolladores no se enteran del problema.

Nivel 3.- Se atrapa la excepcion, se muestra un mensaje amigable pero se guarda la misma en una tabla de la BD donde despues podamos analizar las causas y talvez reproducir el error. Ademas del stack tambien deberiamos guardar el usuario que la provoco, la hora, el IP, el navegador, etc. Con todo eso es mas facil que los desarrolladores puedan corregir el problema facilmente.
El problema aqui es que en un banco podriamos tener decenas de modulos y se formaria un cuello de botella en distribuir los errores a cada equipo.
Esta solucion no es escalable a grandes volumenes de esta ocurrencia.
Piensen por ejemplo en gmail con 400 millones de usuarios.

Nivel 4.- Se hace todo lo del nivel 3 pero ademas se procesa el stack de forma asincrona (sin interruimpir la hebra principal de ejecucion) se identifica (a partir del stack) que modulo es el que causo el problema y se graba toda la informacion en la BD pero ademas se direcciona el error al equipo de desarrollo responsable de la misma.
Esto es mejor que el anterior pero de nuevo no escala si el jefe del equipo tiene que procesar miles o millones de problemas por dia.

Nivel 5.- Capturamos la excepcion, grabamos toda la informacion relacionada a las condiciones en que aparecio la misma. Por otro lado en otro servidor y en otra hebra de menor prioridad nos podriamos conectar al controlador de versiones y detectar en que modulo sucedio y quien fue el que la programó ... asi podriamos direccionar el problema a quien mejor conoce lo que hizo.
De nuevo el problema es que si tuviesemos millares de casos asi seria una tarea no escalable.

Nivel 6.- Hacemos todo lo anterior pero ademas intentamos clasificar la excepcion y acumulamos todas las ocurrencias que sean del mismo caso para presentarlas en forma grafica al responsable.
Ademas podriamos crear un modulo de analisis de ocurrencias como estas de tal forma que al llegar a su trabajo el responsable podria analizar la ocurrencia de estas excepciones por rango de horas en un dia, por origen geografico, por browser, por idioma, etc.
Esta solucion si escala a millones de ocurrencias y permite que el desarrollador pueda corregir lo sucedido.

Nivel Complementario.- Siempre que uno hace un click que carga una nueva funcionalidad lo comun es que se cargue la misma.
Un profesional en computación sabe que el click es algo muy rico y que antes de cargar la nueva funcionalidad debo guardar esa ocurrencia del click junto con el usuario, IP, idioma, browser, hora, dipo de dispositivo, sistema operativo, funcionalidad anterior y posterior. Todo eso se hace de forma asíncrona en una hebra e¡con menor prioridad de tal forma que el usuario no se sienta perjudicado en el tiempo de respuesta de la aplicación.

Solo con esa informacion podria generarse un grafo de transicion de estados en una aplicacion y así podriamos, mas adelante, saber cuales son los caminos por los que se mueve la masa de usuarios. Podríamos detectar que funcionalidades son las mas frecuentes y las menos frecuentes.
Podríamos detectar las condiciones mas frecuentes en las cuales el usuario requiere una funcionalidad, etc.

Esta informacion sumada al Nivel 6 que mencioné anteriormente me da muchos elementos para corregir el software sin tener que preguntarle nada al usuario.

A mi me parece que esto es lo que haría alguien de ciencia de la computación. Es algo de sentido común y no lo he sacado de ningún libro y no estoy aplicando ninguna metodología ... solo sentido común y algo de abstracción.

Saludos
er

Error bean datos not found within scopeHa ocurrido un error procesando: https://150.250.252.104:16640/bdnt_pe_web/error_apl.jspMensaje: bean datos not found within scopeTraza: java.lang.InstantiationException: bean datos not found within scope 
at com.ibm._jsp._error_5F_apl._jspService(_error_5F_apl.java:86) at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:93) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1796) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:887) at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121) at com.ibm.ws.jsp.webcontainerext.JSPExtensionServletWrapper.handleRequest(JSPExtensionServletWrapper.java:222) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:348) at com.grupobbva.ii.sf.servlets.OperacionCBTFServlet.formatErrorResponse(OperacionCBTFServlet.java:1532) at com.grupobbva.ii.sf.servlets.OperacionCBTFServlet.processPost(OperacionCBTFServlet.java:2897) at com.ibm.dse.clientserver.servlet.CSReqProtocolServlet.doPost(CSReqProtocolServlet.java) at com.ibm.dse.clientserver.servlet.CSReqProtocolServlet.service(CSReqProtocolServlet.java) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1796) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:887) at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1937) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:130) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:434) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:373) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:101) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619) at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952) at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1498)