RSSAmplifier

Blog

Tadas Šubonis

A bit of my thoughts about Software Development

dev.tasubo.comRSS feed ↗28 posts

Latest posts

How to use AI meaningfully and effectively

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…

Scrum Introduction & Workflow for Software Developers

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…

Crash course on Domain-Driven Design

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…

Work habits and systems for new developers

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…

Tips for new developers to get productive fast

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…

Technical tips for new developers - clean code and design

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…

Quick and Practical Introduction to RESTful APIs

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…

Creating custom SQL UDFs on Spark (Hive) and Databricks with Gradle and Java

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 {…

Functional Programming for Data Scientists

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,…

Underappreciated Superpower: a look into useful software tests

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…

External GPU: M2 vs Thunderbolt for Deep Learning and Gaming

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…

Functional Object Oriented Programming

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…

How my software development has changed in the last 10 years

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…

How software development has changed in the last 10 years

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…

Apache Mahout Cookbook Review

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…

Network backed data structures

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…

Introduce clock concept in your code

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…

Transactional Scripts (aka Services) and Domain Model

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…

Handling parameter validation

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).…

What is Domain Driven Design about?

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…

Building Play Framework applications using drone.io

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…

Turning off scriptlet support in JSP

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.…

Writing maintainable tests - basics

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…

Use of EventBus in Domain Model

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…

Object Oriented Programming, part 2 - Communication

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”…

Object Oriented Programming, part 1 - Scope

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…

Tips for tasks on Codility

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…

Why do I use Java

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…