I am a software engineer with a Computer Science Ph.D. and 9+ years of experience in industry. I have spent the past ~7 years working on microservices systems related to large-scale creation, analysis, storage, and retrieval of medical information. I would be happy to continue in healthcare technology, but I am open to working in other areas with similar challenges, especially where I can help people raise the bar on software quality.
Distributed systems are notoriously difficult to get right. One reason for this is that our traditional single-threaded unit tests do not catch problems related to network constraints and concurrency. We also sometimes make developing distributed systems more difficult by delegating a) deployment and configuration to a separate Ops team and b) E2E+performance testing to a separate QA team, typically late in our development process. My experience with these systems has made me particularly interested in broadly-scoped tests that tackle non-determinism, automated deployment as a way to tighten/remove debugging cycles, and bridging gaps between teams.
Testing is not the only tool in our belt for making systems that work well, though--our ability to read and understand code (and requirements) is essential. Disambiguating concepts, finding accurate identifiers, and judiciously applying functional programming techniques are examples of valuable activities from which I get a lot of satisfaction. I also enjoy working with junior colleagues to help them write better code and use their editing tools more effectively.
Although I currently consider Java+Spring Boot microservices to be my "bread and butter", I greatly enjoy learning new technologies as the need arises. I am particularly fond of Scala, for instance (though I want to emphasize that it is not appropriate for every job). I am also always eager for opportunities to continue growing my experience in architecture and data engineering.
Java, Bash, Scala, Ruby, JavaScript, TypeScript, Spring (Spring Boot, Spring WebFlux, Spring MVC, Spring Data JPA, Spring Cloud Stream), microservices, Angular, AngularJS, SQL (PostgreSQL, MySQL, Oracle), NoSQL databases (MongoDB, Redis, Elasticsearch), Gitlab CI/CD, Docker, Kubernetes, Terraform, Ansible, AWS (CCP Certified, EC2, EKS, Batch, MSK, Secrets Manager, Parameter Store, CloudWatch, S3, API Gateway, ELB, CloudFront, Route 53, Cognito, RDS, SQS, Java/Ruby SDKs, CLI), Project Reactor, Kafka, Kafka Streams, Kibana, Grafana, OAuth, JWTs, SSL/TLS, Java EE (Servlets, JSPs, EJBs), REST, SOAP, JSON, XML, YAML, nginx, Tomcat, JBoss, Unix/Linux cli tools (ssh, tmux, vi/vim, curl, gpg, etc.), Gradle, Maven, Ant, JUnit, TestNG, Git, Mercurial, Subversion, Coq, Alloy, Lustre, ESC/Java2, Flyway, Jackson, jEdit plugin development, Piccolo (Java library for zoom-able UIs),
Berman, B. A. and Hourcade, J. P (2014). Keyboard Card Menus: A New Presentation of Non-Standard Shortcuts. Journal of Universal Computer Science, Special Issue on Trending Breakthroughs in Human-Computer Interaction.
Berman, B. A. and Hourcade, J. P (2014). Keyboard Card Menus: Faster Learning of Many Fast Commands. In Proceedings of the XIV International Congress of Human-Computer Interaction (Interaction 2013), in the Spanish Congress of Informatics (CEDI), pages 105-112, Spain, 2013. ISBN 978-84-695-8352-4.
New Coq User Interfaces: Survey and Ideas. Presentation co-authored with Aaron Stump and Juan Pablo Hourcade. Presented at The Coq Workshop 2012, Princeton, NJ, USA, August 12, 2012.