Intro Recently, I’ve realised that a lot of newer developers and information workers in general haven’t realised that the availability of LLMs like ChatGPT and Perplexity has changed expectations for what “good work” looks like. TL;DR: the bar has increased Assume this: It’s completely fine to use LLMs - and you should use them. It’s not fine to produce AI slop. You + AI > AI alone. Don’t be a…
A general overview and introduction to Scrum for junior developers that haven’t done this before. Overall, Scrum is one of the Agile project management methodologies. However, Scrum lays out some specific guideliness how to achieve that. Scrum is about these principles (I’ll mention related ceremonies/rituals in the brackets): Iterative delivery of software that WORKS (“done” is actually done) in…
Intro A goal of this write-up is to introduce the main tools of domain-driven design to new developers so they can pick up the approach quickly. There are two big parts of the domain-driven design: organizational (arguably more important) and tactical patterns for developers. This will focus on the latter as for junior and mid-level developers the techniques mentioned here can take the quality of…
About This post collects the working-culture tips - communication, task management, and process habits - that help new developers become productive members of a team. These tips are tailored for remote developers. For the complementary set of code-focused tips, see Technical tips for new developers . Working culture Offline chatting and communication For remote teams asynchronous, offline…
About This post is intended to get new developers up-to-speed quickly on the best software engineering practices. These tips are tailored for remote developers. The material used to live in one long post, but it really covers two distinct topics, so it has been split into two focused reads: Technical tips for new developers - clean code, testing, and design fundamentals: initial readings, keeping…
About This post collects the technical, code-focused tips that help new developers write maintainable software fast. For the complementary set of tips about work habits and team systems, see Work habits and systems for new developers . Initial readings To get some coding basics in order, you should do the following readings (multiple links are provided in the text): Read the first 100 pages of…
Intro This is a quick and rough introduction for fresh developers to RESTful APIs. It should cover just enough to get you started while focusing only on the practical aspects of REST APIs. Why? Why should you build a RESTful API? The reason is, basically, that it’s easy to use and support such interfaces. As Wikipedia defines it: Representational state transfer (REST) is a software architectural…
Intro Recently, I was looking to find a good working example on how to create a custom Spark SQL User-Defined-Function (UDF) on Java on build that using a modern tool like Gradle. Usually, my go-to choice for UDFs is Python but only using SQL-based functions I didn’t manage to find a quick started quickly on Google so I’ll share one here. Gradle config Testing with Gradle version 6.8 . plugins {…
During my years as a software engineer, I got exposed to more and more data-based projects where data engineering and model research were major aspects of the system. Over time, one main pattern became apparent: the functional programming paradigm helps a lot when working with data-oriented systems. For a regular data scientist or a data engineer, they will be quite familiar with ETL (Extract,…
Intro In my opinion, it wouldn’t be outrageous to claim that tests are the most important part of the code you write. This is a part that helps you clarify, specify, and enforce the (correct) behaviour of the code. In 90% of the cases, I would rather have a detailed description of the behaviour that the code should exude rather than the code itself if it is presented as a black-box. While some…
Intro A while ago I’ve wanted to bump up non-existing gaming and deep learning capabilities of my workstation . Since it’s a laptop, I’ve started looking into getting an external GPU. That’s quite a convenient option - you get a portable machine that can hook into a beefy GPU when you are working in your regular place. This required quite a bit of research and the expected performance wasn’t…
Due to strange reason lots of people take Object Oriented Programming and Functional Programming as mutually exclusive paradigms. That doesn’t have to be the case, and with this post I’ll present a few simple techniques to make your code a bit easier to reason about while preserving the communicative nature of OOP. Immutable objects and Functional Programming According to Uncle Bob, the essence of…
This is a continuation of the first part but while in the later I’ve focused more on the whole industry, this time I’ll try to reflect on how my own software development practices changed over time. If I had to point out one common pattern that I try to adhere to, that would be “just make it simple”. Make simple everything: your code, your CI, DevOps. I still remember that roughly ~10 years ago…
It’s a new post to this almost-abandoned blog. I would even say that my inactivity here is a huge missed opportunity. Despite that I’ve been writing a bit elsewhere ( Medium , Facebook, LinkedIn, Packt ) but that’s a poor excuse. To kick it off, I figured it would be perfect to do overview of how software development has changed (in my eyes) over the last 10 years. Languages First of all, the most…
Initially I’ve posted this on Goodreads but I think it’s worth cross posting here :). I have recently finished reading Apache Mahout Cookbook so I can say a thing or two about it now. The first thing to notice is that the introduction covers in detail how to install and run Mahout. Also, it gives a kinda shallow overview of Hadoop that the reader, in my opinion, should already know about. Skipping…
For some time I have been thinking about game development. Particularly in multiplayer HTML5 game development. Why? Because it’s interesting :D. One problem that I ran into while doing my mind experiments was how to exchange data effectively (in regards of API and actual performance) over the network for game world state sharing. The actual thing I would like to do would be to hide network…
Getting current time in the system . If you have been writing unit tests or practising TDD, you may have stumbled with this problem: how do you mock “Date” constructor? Problem in detail: lots of people use “new Date()” to get current time in the system and when they start writing tests they can’t prepare consistent unchanging testing environment since during each call it will return current time…
I often see people falling for the trap of “Transactional scripts” so I decided that it is probably worth writing about this so more programmers would be able to identify flaws in their design and improve. Transactional Scripts Let’s start with Transactional Scripts . What are they? I would say that this is Procedural Programming disguised as OOP. In practice, it looks something like this: you…
It’s usual practice to validate all kind of data in software engineering. The logic behind validation is quite easy to implement but the main question probably lies with how do you do that efficiently, ensure that there are no invalid data in your calls and DRY . Let me suggest a way how to handle that efficiently. First of all you want to validate data as soon as possible ( fail fast and hard).…
A while ago I presented lightning talk at LJC about Domain Driven Design. It was interesting experience actually and I think I enjoyed it. Later I was asked by +Edward Yue Shung Wong ”what is this Domain Driven Design basically about”. I thought that it is interesting topic and worth writing a blog post about it :). To say that short, Domain Driven Design is a process which maps and documents your…
Just recently I was in the need to set up continuous integration for OSS project that I am working on right now ( DDocumentor ) and I found that that drone.io others great free service for open source projects. I created a few projects and everything went fluently since I was using Maven in those other projects but that wasn’t the case with DDocumentor - in this project we are using Play Framework…
As I stated a little bit earlier I am not really fond of writing stuff about some specific technical topics but probably I’ll start doing exemptions. In the end, it is the technology that makes our software work :). Just recently I was talking with +Mantas Aleknavičius and saying that JSP is one of the greatest templating systems that I know of but it has that really annoying thing - scriptlets.…
Recently, when I attended Adopt OpenJDK test fest , I found good examples of test writing cases how NOT to do it. After that I decided that I would like to write a simple guide about how to write maintainable tests. If you haven’t been writing tests already… well let’s just say that you should do so. I am pretty sure that there are lots of literature about that topic. One thing that beginner test…
This time I decided to cover interesting topic about integrating subsystems using EventBus. EventBus is like enhanced observer pattern . Depending on implementation you can synchronously or asynchronously wire different parts of application. This is done through event-like messaging mechanism that works like this: interesting parts of application send events to the bus when something of importance…
As you remember in previous part we talked about some OOP technical stuff that helps us make better software. Now lets talk about other Object Oriented Programming side that does the same. I think it is correct to call this part “communication of code”. OOP enables us to use more convenient ways to express our ideas in code. Also, I believe that it is hard to define a way how to do “communication”…
For a while now I have been noticing people saying that they are doing OOP but instead they are actually programming in procedural style. I am going to start series of posts about OOP to clarify and explain Object Oriented Programming. Of course this may not be the most comprehensible guide but I hope this will help some of us to grasp basic concepts (but not intro about syntax and basic terms). I…
Recently I was interviewed at the very first stage with codility . It’s a tool used to measure programming capabilities of given specialist giving usually three selected tasks which involve creating code that meets running time and space requirements in Big O notation within short amount of time ( I believe there is given 30min per task). Tasks can be quite challenging even for developers with…
I will begin my dev blog on Google platform by post why I am using Java. I have been using Java for quite some time and I think language is truly productive and has many capabilities. I have been using some other languages but this is main one witch I use to do the heavy lifting. Additionally I have been using Python, C++, Ruby, Matlab and PHP. C++ I have been using from my early days and I can…