Skills boring list
Here I skipped things which level of knowledge is hard to measure, such as TDD or SOLID, soft skills like self-organization, task splitting and time management
NOTE: I have plans to make this page less boring, but its not a priority currently
Languages
This group of languages I know very well or looking for an project to enhance my experience as a temporary junior developer in real projects. So please free to invite me if you have one :) These are my favourites I want to be professional in
- Ruby - today is my primary language I use since 2011, and feel myself very comfortable with it. For a few last years there are rumors what Ruby is dying, but trust me - everything’s all right with language, there’s a problem on how people using it. I’m about monkey-patching, God classes and other bad practices. Ruby gives a lot of freedom, and because of that requires a lot of developer’s responsibility. That’s why principles such as SOLID, works so good for Ruby - they prevent developers from wrong language using (take a look at my favorite examples - Hanami framework or DRY* gems family ).
- Clojure/ClojureScript - this is the language I plan to learn deeper. I wrote a small network data miner for myself using it, and it shows as a perfect data processor. Plus, ELisp as a free bonus :). Really interested to work on project using it to grow my Clojure skills!
- Elixir/Phoenix - as most Ruby devs this pair, for me Elixir seems more natural to transit to. Elixir is what I’m currently actively learning, but can’t find a project where I can land as a junior dev :( BTW, I started to learn Erlang about 15 years ago, but there was no demand in Erlang in Russia those days
- Elm - crazy thing, and I just love it :) I used it for frontend part for one of my clients, but he disappeared suddenly, and the work stopped. Actually Elm is a language I’d like to use (for and if) SPAs
- *sh - every developer must feel comfortable with at least one of them, and knowing their different tricks and edge-cases. *sh itself not very hard to learn. Much more important to learn common tools provided by *nix and tasks they allow to complete
- PL/pgSQL - I love it! Actually it’s my first declarative language I started to learn, looks a bit clumsy, but feels so powerful. There wasn’t much tasks where I could learn it more, but every time it’s an interesting experience.
The languages below (and their ecosystem) below I currently not planning to learn or not using anymore:
- Go - had some experience, but well, though this one conquers the world, ultra-fast, blazing fast compilation time etc., I just don’t like the language itself at the moment, feels weird to me. Probably my opinion will change someday. Really cool things created on it, but I like others in this list much more
- Java/Kotlin - though I had some experience with Java many years ago (before C# came into scene), recently I realized what since then Java world changed a lot. Practically speaking I’m learning Java from the start, but thanks to C# experience this process is quite fast. Two goals I have: developing Android apps, and learn deeper Java SDK to use with Clojure
- PHP - I don’t use PHP anymore, but this was my primary language for more than 10 years. I stopped using it when PHP began to demonstrate features of solid language like namespaces, but that was too late for me.
- C# - I don’t use it anymore, but that was a great experience, and I believe it will help me with Java
- Lua - using for creating custom ConTeXt writers for Pandoc (I love parsers and books! :). Easy to learn, have unusual RegExp engine, and not much popular…
Ruby gems
It’s easier to list only major ones: Rack (hello, Plug :) ) Rails, Grape, Hanami, DRY* gems family, Statemachines (any), Devise/Warden, Pundit/Protector/Cancancan, OmniAuth, PDF generation gems, Capistrano, Sidekiq/SuckerPunch, RSpec, Webmock, VCR, Capybara, tons of them…
Databases
- PostgreSQL - this is my favorite RDBMS since I begin to use Rails. My experience include: all the common stuff, administration/migration, triggers, rules, functions, materialized views, table partitioning, PL/pgPSQL, extensions like cube, uuid-ossp, hstore and so on. I’m not a PostgreSQL guru, but it’s always interesting for me to learn something new about it.
- MySQL - I’m better in PG :)
- Redis - I began to use it in my own project when the trend of NoSQL started back to year 2010 (approx).
- Elasticsearch - rarely met this amazing tool, and would like to have more experience with it
- MongoDB - I began to use it at the same time as Redis, within the same project. Not a big fan of it, actually, though I understand where it fits best
API’s integration (really tens of them, and list is incomplete)
- Braintree - sales registration, settlement, void, webhooks. Features usually required
- Firebase Authentication - used this one for authentication for a client with API project. I needed some additional features, so I created custom Warden strategy to handle JWT authentication. Also I’ve added Firebase Authentication to Android app prototype for the same project (Java).
- Firebase Cloud Messaging - very good API understading (direct notifications/group notifications etc.)
- Twilio - this API I learned very well since I was responsible to refactor complex communication part of recent project.
- Apple Passbook API (Web, Pushes and Pass format itself). I used all of these while creating this app.
- Slack - easy integration, nothing interesting: fancy bot messages with images and so on
- Rollbar - error tracking service
- NewRelic - famous easy and configurable app monitoring and analytics (used for Rails and Sidekiq app)
- AcoustID - service providing search in music database by audio fingerprints
- MusicBrainz - huge music database you can search against
- Cover Art Archive - found track name? use this API to get vinyl cover image :)
- Airbrake - very useful, but overpriced, service for tracking runtime errors
- Papertrail - log management, easy to setup, nothing too huge here
- Dead Man’s Snitch - small service for trackin’ cron jobs running
DevOps
- Tools
- Terraform - yeah, this one took Cloud provisioning to the next level! Fantastic tool I’m using a lot for any cloud environment setup/configuration. The only my personal wish is to have elegant multi-env feature build-in. At the moment it’s implemented quite clumsy, and because of that it becomes especially hard to support for really large projects
- Ansible - this perl is my second #1 tool if I’m working on DevOps. It (or to be more specific one of it’s galaxy’s Ansistrano role) even replaced me Capistrano which was my favorite deploy tool for years.
- Prometheus - a must to know what’s going on in your infrastructure/app. Using it in my home lab
- Grafana - Prometheus’s friend, takes time to configure metrics, but we all love neat and informative dashboards :)
- Capistrano - yup, Ruby’s deploy workhorse. This was no-choice option for deploy for me for years (yes, I heard about Mina , but there’s no sense to use it when you have Ansible now)
- Nomad/Vault/Consul - perfect trio when you don’t want feature-bloated k8s. In my opinion, Nomad is really underrated because of k8s hype. Hashicorp are really cool guys, I love their products!
- Packer - if you need to spin up more custom-prepared virtual machines ASAP, Packer is a way to go, nice and easy tool
- Vagrant - any fancy multi-machine configuration (very useful for networking prototyping). Paired with Ansible provisioning, these two form a very powerful tool.
- Clouds
- Google Cloud - my choice of cloud computing services. They took into consideration all AWS bad design decisions, and tried to avoid them. I had a very intensive use of every GC feature but k8S
- AWS (to name a few I worked with for these years)
- Amazon EC2
- Amazon S3
- Amazon RDS
- Amazon ELB
- Amazon CloudFront
- Amazon Route 53 - DNS, TLS certs management, etc
- Amazon SES - including DNS configuration
- Amazon Elastic Beanstalk
- Amazon EC2 Containers
- Amazon CloudWatch
- Amazon CloudFormation - actually I needed it only once after migrated to Terraform
- Linode - nice, cheap and my favourite cloud hosting for small projects if you don’t want to pay for Heroku. Additionally they brought k8s support and Terraform module recently. Nice!
- Heroku - perfect choice I recommend for new projects to deploy ASAP, Redis, PG, MySQL in a seconds. But very pricy for large projects
- Azure - had no chance to used, but the tutors I saw showed there’s nothing radically different there, so learning can be done just at the time of building cloud. We live in times then we can say “another regular cloud” :)
Operating systems
- macOS - my primary every-day perfect OS
- Debian family - my main OS (Ubuntu particularly) before I migrated to OS X in 2011. Now I’m using it for everything but desktop
- Gentoo - because it’s fun and healthy for brain :) Just love it, had it on laptop, but took too many time to manage. Not for servers, of course. Interesting experience to cross-compile it for Raspberry/Nano PIs :)
- FreeBSD - if you need most proven network stack and native ZFS support - this is the choice. It was my #1 server OS in home lab servers until LXC became mainstream.
- Windows - games only, nothing interesting there
Front end
- Hypermedia
- Data-star - this is my current favourite
- htmlx - main until migrated to DS
- hotwired - hypermedia for Ruby on Rails
- Web APIs - modern browsers are amazing!
- Elm - development stalled, but this gem gave the amazing The Elm Architecture (TEA) to the world, and influenced so many tools created later. Sometimes I find it in unexpected places :)
- Re-frame - I love Clojure, but the SPA trend goes down, and probably re-frame will survive only for huge SPAs.
- React - cool, but I mostly sure you don’t need it in 99% cases.