Developers Ecosystem in 2017: JetBrains survey

Recently JetBrains conducted an extended survey about the developers ecosystem, that is, what languages/frameworks the developers are using, in which companies they work (by size), what is the demographical situation etc. The survey obviously mainly covers the users of JetBrains products, so it is not the whole dev ecosystem, but it is interesting still.

Such surveys usually help to understand which technologies are currently on the rise and which maybe deserve more attention that you gave them. This survey, however, lacks a few things. First, dynamics: it doesn’t have any previous results. How can you see the trends if you don’t have anything to compare with the current figures? Second, I for one would be really interested to see what is the dynamics for the JVM languages has been – it is obvious for example that Kotlin is actively promoted by JetBrains, it was seen in a previous annual report for the 2016. But how does it affect Java? What happens with Clojure and Scala in the meantime? etc.

However, there’s still a lot of info in that report, and there are some key takeaways. Continue reading

Posted in Programming, Uncategorized | Tagged , | Leave a comment

Spring Retry, because Winter is coming

OK, this is actually not about the winter, which as we all know has already come. It is about Spring Retry, a small Spring Framework library that allows us to add retry functionality to any task that should be retryable.

There’s a very good tutorial here, explaining how the simple retry and recovery is set up. It explains very well how to add a spring-retry dependency, use @Retryable and @Recover annotation and use RetryTemplate with simple policies. What I’d like to linger on is a slightly more complicated case when we actually want to apply different retry behavior based on the type of the exception. This makes sense because we might know that some exceptions are recoverable and some are not, and therefore it doesn’t make too much sense to try and recover from them. For that, there is a specific retry strategy implementation which is called ExceptionClassifierRetryPolicy, which is used with the Spring RetryTemplate.

Continue reading

Posted in java, Programming, Uncategorized | Tagged , , | Leave a comment

Come on baby and rescue me, or RescueTime productivity tool

Our life online is full of distractions. So much so that sometimes you want to track your time and make sure that you give it to the right cause, and not just kill it mindlessly. And when there’s a will, there’s a way. One of the ways I’ve been using for some years is the tool called RescueTime.

Screen Shot 2017-05-21 at 11.46.35

What does it do? Well, as declared, it tracks your time. It is a watcher on the wall, and it knows all the applications you use, and all the websites you visit (scary huh?). Of course, as all the apps of this category, it learns – or, you teach it. When you start using it, it knows about some of the most popular distractions (Facebook, Twitter etc.) but not much more than that. And of course it doesn’t really know which software you use for work and which for entertainment. But after it tracks you for a week or so, you’ll be able to set the categories yourself for the apps and websites it logs. At first there’ll be a lot of things in “Uncategorized” category, then less and less, until it will basically learn everything you do and then it’ll classify your time properly.

Next step, after you classify your time, is to set your goals. For example, to “spend less than X hours a day on unproductive activities”, or “spend no less than X hours a day on programming”, etc.

And then… you just start trying to reach those goals. Yes, no app can do that one for you, it’s all yours. Well, RescueTime can help out a little – by making you get focused, essentially blocking the websites it knows to be your distractions, for some defined time period. However, this is a premium feature and as such, it’s paid. So, if you are using a free version (as do I), it’s all on you.

You are the master of your time.

Or… are you?
Well never mind. RescueTime will challenge you to be.

Posted in Programming, tools, Uncategorized | Tagged | 3 Comments

Describe your API, or Here comes Apiary

There’s an interesting service out there called Apiary which I think was quite underutilized by us, because I only used it a few times in my work. The importance of it, however, was recently proved by it having been bought by Oracle – which isn’t an ordinary achievement, especially for a tool with seemingly little commercial value. So, what is Apiary? In a few words, it’s a solution that lets you describe the API you’re designing.

However, it goes much further than that.

Basically, the Apiary workflow is as follows:

  • You write the API description using either the API Blueprint or Swagger syntax;
  • You share the documentation and collaborate on it;
  • You show how it works using the Mock Server API calls without writing any code;
  • You use API Inspector to see exactly what kind of traffic you produce and receive.

Rinse and repeat, and after a few iterations you have a perfectly prepared specification, which you can use as a template for your real implementation.

Of course, there’s still a lot of places where things can go wrong, but one of the most frustrating things in API design is not getting the requirements right and not building exactly what your client wants from you. This is where Apiary comes in to save the day and make sure that your design really goes hand in hand with the requirements. After that, of course, it’s your task to make sure that your implementation is mirroring your design… but that is already an entirely different story.

Posted in Programming, tools, Uncategorized | Tagged , | Leave a comment

Why Google is worried, or Are you scared of job interviews?

Recently I’ve been contacted by a Google recruiter, who wrote that she saw my CV in their database and decided to contact me about an opportunity in Switzerland. I declined, because at the time I had a lot on my plate, but she was so friendly and apologetic that I decided to hop on a short call she asked for. During the call I explained that I had a lot of things to think of, and also that I have already been burned once with a Google interview and really didn’t want to repeat the lackluster performance. After all, every such thing is one more crack in one’s morale.

In response, she offered me to have a call with one of the female Google developers, who’d explain their interview process to me in more detail and who might give some hints for me to be more successful in future. Also, it turns out that right now Google is working hard to make the procedure more friendly and less intimidating. For  example, they’ve been conducting a few events with practice mock interviews, after which people could elect to do a real onsite interview and some of them did, because the mock interviews helped them see that it wasn’t as scary as it sounded. Moreover, she told me that technical screening task, which I had to do in a Google Doc (and it’s almost as bad as a whiteboard – or should I say, it’s a very, very much an acquired taste), is currently held within a specially made application (hopefully with at least a syntax highlighting and some formatting). All these steps should provide a less painful experience for the candidates.

One might wonder, is Google experiencing a shortage of candidates? It’s really difficult to believe. I always thought that the competition to get there was crazy.

However, only today I read a post on Facebook: “I was scared of Facebook or Google, so I was looking for a job with the smaller startup companies”. That from a person who was teaching other people how to program and took part in quite a few hackathons.

I kinda thought it was just me that had an awful fear of interviews. I sometimes dreamt of being a part of the giant companies but I tried a few times and failed. Now I think I will probably never get there.

But if Google is worried about that problem, then it means I am probably not the only one.

Posted in interviews, Programming, Uncategorized | Tagged , , | Leave a comment

Interview questions: verify the braces

This is one of the easier coding tasks, but you still can meet it in some preliminary tech screening. The problem looks like this:

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

Description taken from Leetcode (c).

How do you solve it? Continue reading

Posted in interviews, java, Programming, Uncategorized | Tagged , , , | 3 Comments

Cover your bases, or How to play the tests

Writing tests is an important part of a developer’s job, however, it can be boring. Especially if you are not a TDD fan and leave the tests for after the code is done, so that you have to write a big batch of unit tests at once. How to break the monotony and add at least some element of challenge to this routine? Enter running tests with coverage. Continue reading

Posted in java | Tagged , , | Leave a comment