I believe that every developer should know how to deploy an app and what is going under the hood
during that process. That is why I picked jvmops as my trademark.
I consider my strongest points as automation, tests and ability to cope with a change.
Through my career I was doing mostly web development both in startups and in corporate environments. My superiors always admire my ability to onboard. They knew that I can join a new project and not much time is needed for me to become productive. Also being an easygoing person who communicates well, makes onboarding the new team a joy for me and for everyone else.
I'm a quick thinker and I don't take much time to make my decisions. Pressure - if it's not constant works well with me. Those traits especially thrive when things are on fire. It might be a tight deadline or some production issue - I handle those situations quickly and effectively.
During that time I worked mostly with Java 8. But when Docker appeared things got to level up. Java 11 brought a lot to the containers world. Now I run all my pet projects on the newest runtime possible since the higher the number is - the faster and less heavy the app is. Not to mention about those nifty features...
Glue to the everything. Nowadays the most popular framework in the Java ecosystem. I learned a lot
from it's open sources. Also Spring evolving to a spring-boot made a really big statement. It set
some new standards for ability to quickly bootstrap new projects by making a configuration trouble-free.
For what it's worth, I'm very capable with Spring API and I enjoy working with Spring.
Almost every app needs a consistent and reliable data store. This is the reason for relational
databases become so popular. They guarantee data consistency by presence of a transaction.
Single transaction can enforce many business rules and other constrains on a data before
we even put them into the system. If something fails during that process - it's made easy
to rewind and start over.
When discussing databases it is inevitable that the term ORM will come up. The key characteristic of an ORM software is that it lets you map tables from a database onto an object that will be later used for enforcing mentioned business rules.
I have plenty of experience with related technologies that include working with: Oracle, PostgreSQL, H2, Hibernate
Another tool in your development arsenal that can nicely glue things together. But scripting languages
have also different usecases.
Let's consider Groovy. In the Java world it is most seen in test suites where the Spock framework thrives with it's simplicity. It leverages dynamic typing of Groovy what makes tests clear and expressive. I believe that readability is the most important thing when writing test cases and it makes Groovy a nice pick for a jvm test codebase.
When it comes to Bash - it's useful whenever you do stuff involved the operating systems. For me it's usually deploys. I like to automate those processes so knowing Bash is a crucial thing for me.
I do experiment with Python too. I would like to increase my exposure in this area. Maybe my next employer will give me a chance to do that?
Docker made developing and deploying apps a delightful experience.
There are multiple qualities of Docker. For example it ensures that the versioning of dependencies stays on top of the production which was a huge problem before. I also found handy that developer is almost free to try new ideas. Most software vendors are aware of the Docker and they prepare public Docker images in advance so newcomer can simply run their software. There are also some sweet libraries. The one I recommend to check is testcontainers (object API over a docker) - it works great when building a test codebase.
After application is packaged in the Docker image, a common interface for managing deployments has become available. Nowadays there are many applications that are created for this reason. One of them that I work with is Kubernetes. It makes deploying and scaling multiple applications straightforward. This is especially useful tool to have when doing microservices.
NoSQL databases for me are about a compromise. There is a CAP theorem
I can refer to but let me rephrase. When I think of Elasticsearch/Mongo I see a cluster. This gives
increase in availability in a cost of a consistency. What I mean by that is multiple
instances of the database are harder to bring down but they need to be aware of each other.
If data is stored in multiple copies then replicating an update take some time so it might
not be visible right away when user refreshes a page. There are also no transactions protecting the
data so multiple operations can't be rolled back if one of them fails.
NoSQL data stores serve multiple different purposes. There are solutions specialized in search, caching, event sourcing, stream processing and many more. The ones I used in a production are: Elasticsearch, Solr, MongoDB, Redis, Kafka, ActiveMQ, RabbitMQ, InfluxDB