Member for 3 years, 6 months
Last seen more than 1 year ago
I'm a computer scientist that eventually want to work in artificial intelligence, I'm also interested (at least as recreational reading, due to the breadth of each topic) in big data, data mining, computer graphics and web security.
I usually like to follow some concepts of domain-driven design, and apply design patterns (strategy, facade, decorator, composite, object pool, among others) to resolve complex problems in a simple way that makes easier to understand the solution, generally after splitting the problem in a set of subproblems. I try to keep the code modularized and organized using interfaces to specify code contracts.
Another design patterns that I frequently deal with are for instance the ones that are used in spring; dependency injection, one of the main concepts of the framework, that allows to write code that can be easily decoupled, which improves maintainability and makes it easier for testing. For beans, lazy initialization, proxy (java proxy for interfaces and cglib for classes) or singleton (which is the default behaviour) are another patterns that are normally used and can be applied depending on the characteristics and requirements of each bean.
And in some libraries like hibernate (dao, dto and adapter), in rxjava (observer or publish/subscribe) or when working with concurrency (join, lock, monitor, read-write lock, scheduler, thread pool).