Skip to main content

Posts

Evolution Of Programming Languages in an AI perspective

Programming languages are at the heart of possibilities in software development, evolving to meet the growing complexity of the problems we solve with computers. From the early days of machine code and punch cards to the modern era of high-level languages and AI-augmented coding, the journey of programming languages reflects humanity’s relentless pursuit of abstraction and efficiency. As artificial intelligence begins to reshape the landscape of software development, we are poised to enter an era of AI-powered programming languages—tools that will fundamentally change how programmers approach their craft. From Punch Cards to High-Level Languages The earliest programmers worked directly with machine code, encoding instructions in binary or hexadecimal formats. This labour-intensive process required an intimate understanding of the underlying hardware. Punch cards, though a technological marvel of their time, epitomized the low-level nature of early programming—tedious, error-prone, and ...
Recent posts

Agile Work Ai World

The transformation of society through technological revolutions has constantly fundamentally reshaped the labour structure. The Industrial Revolution, for instance, marked a profound shift in work for the labouring classes, moving them from fields. The ongoing transformation brought about by artificial intelligence (AI) has left many of us grappling with uncertainty. Work is shifting, and roles once felt secure are becoming precarious or redundant. While these transitions can be disorienting, they also offer an opportunity to rethink and redesign the way we work—to create environments that are not only efficient but also empowering. Central to this effort is embracing frameworks like agile work, which can counteract the isolation and disconnection—what some might call alienation—that workers often feel in a rapidly changing world. The Challenge of Alienation As AI increasingly takes over repetitive and knowledge-intensive tasks, workers risk losing their sense of purpose in the workpla...

The Industrial Vs the AI Revolution

The transformation of society through technological revolutions has constantly fundamentally reshaped the labour structure. The Industrial Revolution, for instance, marked a profound shift in work for the labouring classes, moving them from farmers' fields and industries into factories. Today, the so-called AI Revolution promises to bring about a similarly seismic shift, not for manual labourers but for the office and intellectual workers who were once considered relatively insulated from mechanization. While the material and historical circumstances differ, the underlying forces remain strikingly parallel. Changing the Nature of Work During the Industrial Revolution, the mechanization of production displaced artisans and craftspeople, as machines took over tasks that had required years of training and skill. This was not merely a displacement of labour but a profound de-skilling of workers, whose tasks were broken into repetitive, machine-supervised steps. The labour force expande...

Balancing Present Needs and Future Growth

In software development, traditional project planning often emphasizes immediate needs and short-term goals. However, Bentoism, which stands for "Beyond Near-Term Orientation," provides a multidimensional framework that can improve software project planning. It advocates for a balance between short-term achievements and long-term sustainability, considering both individual and collective impacts. Technical debt and architectural debt are inevitable challenges that teams must navigate. If managed properly, these debts can help long-term sustainability and growth. Bentoism, with its forward-looking and holistic perspective, offers a nuanced framework for handling these challenges while promoting continuous improvement.  Understanding Bentoism  Bentoism, inspired by the structure of a bento box that contains a variety of foods in separate compartments, encourages a broader perspective in decision-making. It promotes consideration of 'Now Me' (current self-interests), ...

Yearly Educational Goals vs. Agile Team Learning

At this time of the year, employees often have their yearly reviews and set goals for the following year. From an agile point of view, this is an antipattern. The Agile methodology promotes continuous improvement and adaptation. This philosophy often needs to match this traditional approach of setting fixed yearly educational goals for developers. This discrepancy can be analyzed regarding how these educational strategies align with the interests of labour and management within the industry (as opposed to the orchard)  and how they contribute to or alleviate the alienation and class dynamics inherent in the tech workforce. Yearly educational goals in software development typically involve predefined objectives that developers are expected to achieve within a set timeframe. While this approach provides clear targets and a sense of structure, it can be rigid and limiting in a field known for rapid technological changes and evolving project needs. Such goals may become quickly outdate...

Software Projects as an Orchard

This blog is named The Sourcerers Orchard. The title is intended as a pun about source code and the orchard as an analogy between software development and handling an orchard. Creating a new orchard is an endeavour that blends the art of gardening with science. The same could be true for software development. We often talk about software as an industry, and this mindset harms our work. We are not an industry; we do not repetitively produce the same unit at an assembly line. We grow new things in a partly unpredictable world. Systems like SAFe are born in industrial thinking, like modern mercantilism, focused on numbers, not growth. We need a new way of thinking, to make high quality software instead of failing production lines. Planning Your Orchard Embarking on creating a new software project is akin to cultivating a thriving orchard from the ground up. It’s a journey that requires patience, dedication, and a strategic approach to nurturing growth and overcoming challenges. Let’s expl...

ZIO and ZStreams

Combining ZIO's powerful effect system with ZStream allows for expressive and efficient streaming computations, but the step between ZIO and ZStream can be confusing for the beginner. This tutorial will guide you in using ZSink , ZStream.fromZIO , and ZStream.runHead in a Scala application. We'll develop a simple step-by-step application to demonstrate these concepts. Prerequisites Basic understanding of Scala and functional programming Familiarity with ZIO 2.x library Setting Up Your Environment Ensure Scala (2.13.x or 3.x) and sbt are installed. Add ZIO 2 and ZIO Streams to your build.sbt : "dev.zio" %% "zio" % "2.0.21" , "dev.zio" %% "zio-streams" % "2.0.21" Introduction A couple of weeks ago, I wrote a post about ZIO :s monadic nature. As ZIO is a monad we can use map and flatMap to chain effects, resulting in a new monad. ZStream s are also monads in the same way. We often use for -comprehensions to combine t...