Image for post
Image for post

Easy distributed computing with Java

A distributed system is a software system in which components or programs located on a network communicate and coordinate their actions by passing messages. It constitutes a natural evolution of the basic computer architecture for building large scale applications (as you can read on my previous post).

Since the last couple of decades, object-oriented distributed computing came to be the de-facto method to communicate systems relying on different machines, especially on private networks within large enterprises. Nowadays most of these interprocess communications are being migrated to web services using proprietary API specifications, many of which reside on cloud-based platforms.

However, I believe that if you truly care about the underlying principles of software systems and take fully advantage of this knowledge, you will inevitably come up with original ways to approach their construction and, most importantly, solve problems. …


Image for post
Image for post

Towards a distributed object model with Java

A distributed system is a software system in which components or programs located on a network communicate and coordinate their actions by passing messages. It constitutes a natural evolution of the basic computer architecture for building large scale applications.

I believe that the more you understand the bigger picture of a given topic, the more prone you are to reckon its importance and, hence, the more likely you are to understand it. So let’s go back in time to learn how distributed computing came along with the primary objective of gaining a deeper understanding of it.

A historical perspective on distributed computing

Long, long time ago in cyber-time (think 50's and 60's), operating systems supported only single-process computing. Machines booted up, loaded a program written on cards, ran it, and then shut down. Then came time-sharing, which was enabled by multi-tasking operating systems. …


Image for post
Image for post

How to think about concurrent programming

How can a computer perform multiple tasks simultaneously given that most of them contain one single processor? I mean, what is happening inside your computer when you browse the web, write an essay and listen to music at the same time? Running a program necessarily entails using the processor and even today most computers have only one. So, what is really happening? The main idea is “time sharing”. What happens is that the machine divides its attention between separate tasks in ways that maximizes efficient use of the machine’s resources and often masks the fact that it is actually attending to just one task at any given moment in time. …


Image for post
Image for post

How to program the components of your apps

Broadly speaking and regardless of which software development process one can implement, there are basically five significant phases common to all software projects: (1) requirements gathering, (2) software design, (3) software construction, (4) software testing, and (5) maintenance. Among them, probably the most essential for the overall efficiency of a project is software design: the definition and specification of the entities (aka. components, classes or elements) that will be part of your system.

The software design phase comprises several aspects that are critical for any project involving software, including but not limited to: software architecture, software design patterns, user interface design and algorithms efficiency. …


Image for post
Image for post

What I learned during the first half of a Java course

Software engineering is a group activity but most software is started by one single person (or a few). You might recall that there are two global phases pertaining the evolution of any software system: the development and the maintenance. Although sometimes underestimated, maintenance is the most expensive and longest stage in the life cycle of any software system. Maintenance is crucial and unavoidable since all software must evolve and be extended. Initial development is, literally, just the tip of the iceberg. As experts discuss, “software is always in Beta phase”.

I like to use analogies to explain my concepts and points of view. If you’re a web developer, you could relate my “iceberg” analogy with the coding of a web application: user interface is just the tip of the iceberg with regards to the entire system. If you’re an entrepreneur or business development guy, you could relate it with the whole lean development frenzy: the first version of any software product is just a minimum viable product created to test whether an idea has a thriving market or not. But if you’re a software engineer or computer programmer like me, you could relate it with writing a story. …


Image for post
Image for post

Personal thoughts on the value of software

The image above is one of the most renowned comics in the software industry. Look at it carefully… isn’t it hilarious?… LOL! In fact, it is more realistic than anyone could think. It represents the day-to-day life of many software-driven companies. Thankfully, a software project leader usually begins to tackle issues effectively after a couple of hard-learned lessons and very few software enterprises have to deal with really big and interesting developments (budgets of US $1M+).

In this first post, I’d like to give my readers a glimpse of the importance and complexity of software projects. To do so, I’ll share some easy-to-read (but hopefully insightful) Q&A’s. I believe everyone should have their own answers to these and other prevailing questions of our current digital world because they can help you approach innovation in truly creative and meaningful ways. …

About

Oscar Fabra

Entrepreneur who loves God, likes consumer companies and hates social inequalities.

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