-
Working with legacy code
Most projects carry some amount of legacy code. You can’t work very fast with a legacy code base, but you can speed it up if you establish a strategy to deal with your existing code and mitigate risk as new development goes forward. What is Legacy Code? Legacy code is code from the past, maintained…
-
Where is the include coming from?
The includes of the system map out the dependencies of the system, which files depend on which, which subsystem depends on which. When working with a system, it’s always useful to map out the dependencies before hand. Here are some examples: WordPress 2.2.1 http://wordpress.org MediaWiki 1.12 http://www.mediawiki.org/ phpBB 3.0 http://www.phpbb.com/ phpMyAdmin 2.9.1.1 http://www.phpmyadmin.net/ Symfony 1.1…
-
10 concepts that every software engineer should know
In this post, Alex Iskold discusses the top 10 concepts software engineers should know. A successful software engineer knows and uses design patterns, actively refactors code, writes unit tests and religiously seeks simplicity. Beyond the basic methods, there are concepts that good software engineers know about. These transcend programming languages and projects – they are…
-
Architecture-Oriented or Feature-Oriented?
Traditionally, there are two fundamental approaches when it comes to organising your development teams: the Architecture-Oriented approach and the Feature-Oriented approach. The first privileges teams that focus on the different architectural layers or components, whereas the second prefers to organise teams around deliverable application features. How do you organise your development teams?
-
Flickr Architecture
Flickr Platform PHP MySQL Shards Memcached for a caching layer. Squid in reverse-proxy for html and images. Linux (RedHat) Smarty for templating Perl PEAR for XML and Email parsing ImageMagick, for image processing Java, for the node service Apache SystemImager for deployment Ganglia for distributed system monitoring Subcon stores essential system configuration files in a…
-
A Modular Approach to Web Development
MVC is about loose-coupling, and Modular Programming takes that concept to the extreme. A modular application can dynamically load and unload modules at runtime, completely separate applications in their own right, which interact with the main application and other modules to perform some set of tasks. In this article you will presented with a different…
-
Foundations of Programming: Building Better Software
Karl Seguin has released the official, and completely free, Foundations of Programming eBook. Although simplistic, every programming decision I make is largely based on maintainability. Maintainability is the cornerstone of enterprise development. Frequent readers are likely sick of hearing about it, but there’s a good reason we talk about maintainability so often – it’s the…
-
Learn to Build Robust, Scalable and Maintainable Applications using MVC
MVC is about loose-coupling, and Modular Programming takes that concept to the extreme. A modular application can dynamically load and unload modules at runtime, completely separate applications in their own right, which interact with the main application and other modules to perform some set of tasks This document (PDF) discusses the classes and interfaces of…
-
Agile Database Deployment Using Phing
Phing allows you to use SQL to define changes to your database schema, making it possible to use a version control system to keep things synchronized with the actual code. A common way to automate development and deployment tasks is by writing shell scripts, however, Phing provides some advantages over shell scripts for task automation.…
-
13 reasons why UML failed
One of the reasons is that UML attempts to become a programming language. By aiming to be able to generate full code actually UML tries to be a programming language. In my mind there is a big problem with a general purpose graphical programming language. In human history the written form of all languages evolved…
-
Software Engineering for Web Applications
A twelve-year-old can build a nice Web application using the tools that came standard with any Linux or Windows machine. Thus it is worth asking ourselves, “What is challenging, interesting, and inspiring about Web-based applications?” This textbook written by Eve Andersson, Philip Greenspun, and Andrew Grumet for the MIT course “Software Engineering for Internet Applications”,…
-
An A-Z Guide to Being an Architect
-
Building Scalable Development Environments
-
Software Development AntiPatterns
An AntiPattern is a pattern that tells how to go from a problem to a bad solution. For example: The Blob Procedural-style design leads to one object with a lion’s share of the responsibilities, while most other objects only hold data or execute simple processes. The solution includes refactoring the design to distribute responsibilities more…
