There are two things that you need to learn to be successful in creating software. The first one is usually a language, a programming language, the second one design. 👀 No, I am not talking about graphics design. I am talking about engineering design.

Your goal when creating software is to tell the computer what to do. Thus, knowing a progamming language makes an excellent first need. By learning a programming language, you become a coder or a programmer. That is just the first step. Any kid who finishes elementary school can write, but that does not mean that any…

Photo by Max Duzij on Unsplash

Agile development is the ability to develop software quickly in the face of rapidly changing requirements. Agility is achieved by:

  • following practices that provide the discipline and feedback needed,
  • writing clean code, and
  • using design principles that keep our software flexible and maintainable; further, when required, applying design patterns to solve specific design problems.

It is easy to identify and agree with agile practices and clean code approaches. However, sometimes, it is wrongfully assumed that agile is all about coding, and design is irrelevant or does not exist. It is not the case.

The most important thing to have in…

Photo by Chaitanya Tvs on Unsplash

Big O notation describes the complexity of an algorithm as a function of the size of an input. Complexity can be about performance (runtime complexity) or space (amount of memory used).

Big O is an asymptotic notation for the worst case or the ceiling of growth for a given function. It is not about finding an exact value but about describing the worst-case scenario as closest as possible. For instance,

  • printing all the elements of an array with N elements, it needs O(N) time, and
  • searching linearly for an element in an array with N elements is also O(N).


Deep Learning for Java is a library that provides support for many of the algorithms associated with deep learning, including neural networks 🙂. Let us review the primary tasks for creating, training, and running a neural network using DeepLearning4J.


Let us work with an example that we reviewed before: a neural network to recognize the XOR operator. In a previous story, we implemented this from scratch. Now, let us use DeepLearning4J. As shown in Figure 1, this neural network has two inputs, a hidden layer with three neurons and an output layer with one neuron. …

One of the most powerful and widely used artificial-intelligence approaches is called neural networks. But, What exactly are they? And, How they work? Let me explain it in plain English.

What is a Neural Network?

A neural network is a collection of connected nodes called neurons.

What is a Neuron?

A neuron is a node that has one or more inputs and a single output, as shown in Figure 1. Three actions take place inside of a neuron:

  • A weight is associated with each input to amplify or de-amplify it;
  • All weighted inputs are summed;
  • The sum is used as an input for an activation function which determines the…

Let us talk about structural design patterns. Patterns help us to connect classes and objects in order to form larger structures. Decorator is one pattern in the structural category.


The Decorator pattern allows extending (decorating) the functionality of an object. It is an alternative to inheritance. Decorator provides new functionality in run-time to a specific instance, while inheritance adds functionality at compilation time and the change affects all instances of the new class.

For example, from a class Person, we can extend a class Student which adds functionality to Person, and then we can choose to create instances of Person…

Affective Computing is all about computers understanding human emotions. By computer I mean a robot, your car, your laptop, or even your phone. And, you could be thinking: Why we want computers to be able to do that? How computers could be able to do it? Two very important questions. Let’s elaborate on them.


Because emotions signal what matters to us and what we care about; further it has been argue that emotions impacts our rational decision-making and action selection. Think about your decision-making when buying a new phone, a new laptop, a car, or selecting a Univerity, a new…

A recurrent question that my students ask is about the difference, if any, between a Factory and a Builder, in terms of the software design patterns with these names. Moreover, they ask about the difference, if any, between the builder as described in the GoF patterns and the so-called Fluent-builder, commonly used in the Java Stream API when calling methods in the pipeline.

They are creational patterns, templates for object creation mechanisms suitable to a specific situation. The basic form of object creation (the new operator calling constructors) everywhere result in design problems and add complexity.

Remember, programming in the…

Creational design patterns provide options for object creation (instantiation of a class ) because sometimes, the basic form of object creation could result in design problems or in added complexity to the design. Creational design patterns solve this problem by somehow controlling this object creation. They are composed of two dominant ideas: the first one is encapsulating knowledge about which concrete classes the system uses; and the second one is hiding how instances of these concrete classes are created and combined. The Singleton Pattern is one of the most used design patterns. …

Starting with Java 8, we can enhance our Java code solutions with functional approaches. But. what exactly does Java provide? Let’s take a look.

What is functional programming?

Functional programming is a programming paradigm where the focus is on “what to solve” in contrast to a procedural paradigm where the main focus is “how to solve.” In other words, functional programming is a declarative paradigm. The core of Functional Programming is to solve computational problems as evaluation of mathematical functions. Yes, functions, these relationships associate elements of a set X (inputs) to a single element of a set Y (output). In functional programming, functions…

Javier Gonzalez

Software Engineer. Teaching Professor. Intelligent Systems, Emotion AI, CS Education. ACM Distinguished Speaker

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store