background preloader

Algorithms and Design Patterns

Facebook Twitter

A Short Guide to Hard Problems. 10 Common Software Architectural Patterns in a nutshell. Design Patterns. In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn't a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.

Uses of Design Patterns Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation. Often, people only understand how to apply certain software design techniques to certain problems. In addition, patterns allow developers to communicate using well-known, well understood names for software interactions. Composing Software: An Introduction – JavaScript Scene. Note: This is the introduction to the “Composing Software” series on learning functional programming and compositional software techniques in JavaScript ES6+ from the ground up.

Composing Software: An Introduction – JavaScript Scene

Stay tuned. Decisions, Decisions: How to Make Smart Tradeoffs When Developing Software. Package by component and architecturally-aligned testing. Screaming Architecture. Imagine that you are looking at the blueprints of a building.

Screaming Architecture

This document, prepared by an architect, tells you the plans for the building. Software architecture – @herbertograca. This post is part of The Software Architecture Chronicles, a series of posts about Software Architecture.

software architecture – @herbertograca

In them, I write about what I’ve learned on Software Architecture, how I think of it, and how I use that knowledge. The contents of this post might make more sense if you read the previous posts in this series. After graduating from University I followed a career as a high school teacher until a few years ago I decided to drop it and become a full-time software developer. Software engineer — from monolith to cloud: think small. Functional programming design patterns by Scott Wlaschin. Category Theory for Programmers: The Preface. Part One Part Two Part Three There is a free pdf version of this book with nicer typesetting available for download.

Category Theory for Programmers: The Preface

You may order a hard-cover version with color illustrations at Blurb. Or you may watch me teaching this material to a live audience. What is Reactive Programming? – RedElastic. The Coming Software Apocalypse - The Atlantic. There were six hours during the night of April 10, 2014, when the entire population of Washington State had no 911 service.

The Coming Software Apocalypse - The Atlantic

People who called for help got a busy signal. One Seattle woman dialed 911 at least 37 times while a stranger was trying to break into her house. When he finally crawled into her living room through a window, she picked up a kitchen knife. The man fled. To hear more feature stories, see our full list or get the Audm iPhone app. The 911 outage, at the time the largest ever reported, was traced to software running on a server in Englewood, Colorado. Code Refactoring: Learn Code Smells And Level Up Your Game! S.O.L.I.D, GRASP And Other Basic Principles of Object Oriented Design - CodeProject. I will start with a cliché.

S.O.L.I.D, GRASP And Other Basic Principles of Object Oriented Design - CodeProject

A software code should depict following qualities: Maintainability Extensibility Modularity etc You may find yourself in a difficult situation when you ask a question about whether any particular code depicts above quality features or not. A technique that helps is by looking at the development timeline of any software. If the software code remains easier to maintain, extend and modular over its lifetime then it means that the code has above quality features. Collection Pipeline. Collection pipelines are a programming pattern where you organize some computation as a sequence of operations which compose by taking a collection as output of one operation and feeding it into the next.

Collection Pipeline

(Common operations are filter, map, and reduce.) This pattern is common in functional programming, and also in object-oriented languages which have lambdas. This article describes the pattern with several examples of how to form pipelines, both to introduce the pattern to those unfamiliar with it, and to help people understand the core concepts so they can more easily take ideas from one language to another. The collection pipeline is one of the most common, and pleasing, patterns in software. ImmutableServer. Continuous delivery · build scripting tags: Automated configuration tools (such as CFEngine, Puppet, or Chef) allow you to specify how servers should be configured, and bring new and existing machines into compliance.

ImmutableServer

This helps to avoid the problem of fragile SnowflakeServers. What is a Service Delivery Platform? Learn REST in 18 Slides - O Beautiful Code. Big-O Algorithm Complexity Cheat Sheet. Google's Clean Code Talks. What Is Clean Code? - DZone Agile. Data Structure Visualization. Formal Verification Creates Hacker-Proof Code. In the summer of 2015 a team of hackers attempted to take control of an unmanned military helicopter known as Little Bird.

Formal Verification Creates Hacker-Proof Code

The helicopter, which is similar to the piloted version long-favored for U.S. special operations missions, was stationed at a Boeing facility in Arizona. The hackers had a head start: At the time they began the operation, they already had access to one part of the drone’s computer system. From there, all they needed to do was hack into Little Bird’s onboard flight-control computer, and the drone was theirs. Guide: Writing Testable Code. To keep our code at Google in the best possible shape we provided our software engineers with these constant reminders.

Guide: Writing Testable Code

Now, we are happy to share them with the world. Many thanks to these folks for inspiration and hours of hard work getting this guide done: Also thanks to Blaine R Southam who has turned it into a pdf book. Flaw #1: Constructor does Real Work Warning Signs. Dictionary of Algorithms and Data Structures. The Stony Brook Algorithm Repository. This WWW page is intended to serve as a comprehensive collection of algorithm implementations for over seventy of the most fundamental problems in combinatorial algorithms.

The problem taxonomy, implementations, and supporting material are all drawn from my book The Algorithm Design Manual. Since the practical person is more often looking for a program than an algorithm, we provide pointers to solid implementations of useful algorithms, when they are available. Because of the volatility of the WWW, we provide local copies for many of the implementations. We encourage you to get them from the original sites instead of Stony Brook, because the version on the original site is more likely to be maintained. Sequoia - Innovate or Die: The Rise of Microservices. Software has emerged as the critical differentiator in every industry, from financial services to fashion, as “technology first” startups disrupt global markets.

To stay alive, some of the biggest global enterprises we know are making a radical change in how they build and deliver software. The new model is called microservices, an approach where large applications are broken down into small, loosely coupled and composable autonomous pieces. Microservices have four main benefits: Edit Distance Reveals Hard Computational Problems.

At first glance, the big news coming out of this summer’s conference on the theory of computing appeared to be something of a letdown. For more than 40 years, researchers had been trying to find a better way to compare two arbitrary strings of characters, such as the long strings of chemical letters within DNA molecules. The most widely used algorithm is slow and not all that clever: It proceeds step-by-step down the two lists, comparing values at each step. If a better method to calculate this “edit distance” could be found, researchers would be able to quickly compare full genomes or large data sets, and computer scientists would have a powerful new tool with which they could attempt to solve additional problems in the field. But researchers aren’t quite ready to record the time of death. One significant loophole remains. Recursion Explained with the Flood Fill Algorithm (and Zombies and Cats) The source code of everything in this article can be downloaded here: floodfill_src.zip Consider the Lazy Zombie.

Genetic Programming: Evolution of Mona Lisa. Sorting algorithm visualisation. 15 Sorting Algorithms in 6 Minutes. Object Oriented Design. Is Design Dead? For many that come briefly into contact with Extreme Programming, it seems that XP calls for the death of software design. API Design. Ultimate Guide to API Design. An Introduction to APIs. Most Code Is an Ugly Mess. Here’s How to Make It Beautiful.

Courtesy The Daily WTF. Dasgupta-Papadimitriou-Vazirani.pdf. MIT6_042JF10_notes.pdf. Data Structures and Algorithms Tutorials. Data Structures and Algorithms - CodeChef Discuss. Running Time Graphs. The graph below compares the running times of various algorithms. Hill Climbing Algorithm & Artificial Intelligence - Computerphile. A Visual Introduction to Machine Learning. Finding better boundaries.