I am a Ph.D. candidate working for the Software Design and Collaboration Laboratory
at the University of California, Irvine
in the Donald Bren School of Information and Computer Science
with a concentration on Informatics - Software Engineering Track
. I have been awarded a Fulbright Scholarship and an ICS Fellowship to pursue my Ph.D. Degree. My advisor is André van der Hoek
and my research areas are Software Engineering and Software Design.
I have experience working as software engineer at Google and IBM, building infrastructure for world-class applications including Google Analytics and IBM Rational Jazz.
Before I started my PhD I was Instructor (Junior Faculty) at University of Los Andes in Bogota, Colombia as part of the Software Construction group. I also was in charge of leading small development groups implementing support tools for several development and learning processes during this 4 year period.
Software engineering; development tools; program comprehension; mining software repositories; concern-oriented software engineering; topic modeling for understanding software evolution.
Awards and Honors
|2011 || Awarded a Miguel Velez Fellowship for Winter 2011, University of California Office of the President|
|2009 || Awarded a 3 year ICS Fellowship from the Donald Bren School of Information and Computer Sciences at UC Irvine|
|2008|| Awarded Fulbright Scholarship to pursue a Ph.D. in Software Engineering- Fulbright-Colciencias-DNP program |
|Winter 2011:|| Lecturer for INF 122 - Software Design II |
|Fall 2009:|| I was Reader for INF 153 - Computer Supported Collaborative Work this quarter. Course webpage |
|Fall 2005-Spring 2009:|| I was Junior Faculty (A.K.A Instructor) at University of Los Andes in Bogota Colombia. I was lecturer for the Software Architecture course for undergraduate students 7 semesters, lecturer for the Software Engineering course for undergraduate students 3 semesters and lecturer for the basic programming course (Algorithmics and Object Oriented Programming) 4 semesters. For more info on my previous work see my old webpage .|
Research/Industrial Projects (brief summaries)
|Code topics: Using topic models to understand the evolution of a software ecosystem: Sept 2012 - present:||The development of a software system is now ever more frequently a part of a larger development effort, including multiple software systems that co-exist in the same environment: a software ecosystem. Though most studies of the evolution of software have focused on a single software system, there is much that we can learn from the analysis of a set of interrelated systems. Topic modeling techniques show promise for mining the data stored in software repositories to understand the evolution of a system. In my research I seek to explore how topic modeling techniques can aid in understanding the evolution of a software ecosystem. The results of this research have the potential to improve how topic modeling techniques are used to predict, plan, and understand the evolution of software, and will inform the design of tools that support software engineering activities such as feature location, expertise identification, and bug detection.|
|Google Software Research Intern: June 2012 - Sept 2012||Worked as developer in the Google Analytics Management API project. In charge of designing and implementing the write API for GA management entities. |
| Survey of Concern oriented development: Sept 2011 - June 2012:||
Concern-oriented development has been of significant interest to the software engineering community since the early formulation of its importance by Dijkstra and Parnas. Many different approaches have emerged since then, and continue to emerge, which support developers when they need to reason about and make changes to code in terms of the concerns that govern the system. While initially much work focused on modularization of concerns, relying on programmatic constructs to encapsulate concerns in modules, new types of approaches have more recently emerged that address the problem from quite different directions and lead to quite different forms of support.
I have been working on a survey that is inclusive of the breadth of approaches to date. Its main contributions are a set of definitions of concerns that precisely delineate the field, an evaluation framework that characterizes a set of capabilities that any approach to concern-oriented development ideally should offer, an articulation of how four, previously disparate categories of approaches closely relate, and a set of nine observations that take stock of the field as it stands today and provide guidance as to where it should head in the future.
|Google Software Research Intern: June 2011 - Sept 2011||Worked with the TvAds group at the Google Irvine office. Designed and built support infrastructure for a web based application. Improved client-side, web caching mechanisms to deliver better performance.|
|Contextualized Coding: Sept 2010 - June 2011:||The Contextualized coding project aims to improve development by providing richer contextual cues to developers mined from process support tools and code analysis. The Code Orb is the first prototype view which shows developers fine-grained information related to code volatility. The Code Orb is implemented as a series of plug-ins to the Eclipse IDE.|
|IBM research intern: June 2010 - Sept 2010||Worked in a development co-op with the Ottawa software group in the Jazz - Rational Team Concert (RTC) – Versioning system group. My development effort had as objective improving the integration of the versioning features of Jazz / RTC with other versioning systems such as GIT and Subversion. Concretely, I implemented extensions to export and synchronize files maintained in Jazz / RTC with Subversion. Scalability and performance was a critical issue of this integration. Frameworks/Languages used: Eclipse plug-ins, Java, SVNKit.|
|Calico: 2009-2010||Calico is a free hand rapid design tool for the initial creative and typically informal stages of software design. Calico is designed to support the informal phases of design, with features that are designed to amplify good creative design practices. I worked as developer extending the functionalities of the tool and afterward I performed usability evaluations of some of the newer functionalities of the tool and drafting research results from these experiences. Calico is a Java stand-alone application.|
|Change Based PLAs and CM: 2008-2009||I was lead developer for a research project were we integrated change-based SCM tool implemented in JEE technology and a Product Line Architecture definition environment. The integration maps the product architecture defined in xADL, EASEL and ArchStudio to a concrete implementation in Java and maintains the consistency of the implementation with its architectural definition in a change-based SCM. Frameworks/Languages used: Java, code generation with Velocity, Eclipse plug-ins.|
|Management Game: 2007-2009||In June 2007 we initiated a project to develop a support environment for the "Management Game" course taken by undergraduate students in the last semester of the Business Program at University of Los Andes. My role in the project was as lead Software Architect in charge of defining and specifying the system global design, technological platform and architectural restrictions. Additionally I assisted the project leader in the implementation and testing phases of the project. Frameworks/Languages used: JEE, code generation with MDA (EMF + ATLs) DSLs (XML, XSL), Java, Java Server Faces, Hibernate.|
|Testing in a Global Environment: 2004-2006||This research project that had as main objective the definition of an appropriate testing and software defect correction process in a global software development environment and the development of process support tools and an integration platform that fulfills the requirements of an appropriate infrastructure for Internet-scale integration. My role was as designer and lead developer of an event based messaging infrastructure. Frameworks/Languages used: J2EE, Java, code generation using XMI and XSL.|
|QualDev development Group: 2005-2009||I was the leader of a development group made up mainly of undergraduate students in a capstone project course. This group is a software engineering laboratory where students learn how to use software processes, methodologies and applications as tools to produce high quality software. The group works as a laboratory to experiment with software processes and technologies. The group develops tools in the broad domain of software development process support and some of these are successfully used in real contexts. Frameworks/Languages used: J2EE, JEE, Java, PHP, JME, XML, Jena, Velocity, Hibernate, Spoon, JSF, Struts, amongst many others.|