auf.suno
Connector, geek, tech evangelist, libertarian, business enabler/angel, globetrotter, sportsman, agnostic, cosmopolitan, funny finch ...

This is my (Markus Gattol aka Suno Ano) website. It is composed and driven exclusively by Open Source Software. This website is
seamlessly integrating into my daily working environment (GNU Emacs + DebianGNU/Linux) which therefore means it becomes
a fully fledged and automatized publishing and communication platform. It will be under construction until 2012.

Open Source / Free Software, because freedom is in everyone's language ...
Frihed Svoboda Libertà Vrijheid เสรีภาพ Liberté Freiheit Cê̤ṳ-iù Ελευθερία Свобода חרות Bebas Libertada 自由
auf.suno
Website Sections
Home
FAQs
About Me
Weblog
Photo Albums
Software Development
Status: Just notes so far
Pagecode: T->1 A->SAml H->tr C->SA[cccej]
Last changed: Saturday 2010-08-07 [14:43 UTC]
Abstract:

This page is about software development in general. I see myself more as an artist than a programmer -- the process of creating software is art. However, this page focuses on either my involvement with software projects or just looks at software from a developers point of view. As I develop software, I will also focus on issues that need to be thought of before the first line of code is written. Algorithms, like other theory is what I find vital for anybody who is interested in creating and maintaining a software product and its whole life-cycle. The page might also scratch philosophy when it comes to FLOSS (Free/Libre Open Source Software) versus its proprietary counterpart. In general, this page and what it is going to be is not dedicated to a special software related topic whatsoever ... I find that a good thing ... leaves a lot of space for creativity.
Table of Contents
Overview
Areas of Software Development
Creating Software
SCM
Design Patterns
Project Management Methods
Software Development Techniques
Miscellaneous
Warranty on Software

Overview

Modern information and communications technology is dramatically and rapidly changing society. We have a choice to either share our knowledge and understanding to help others in many ways, or to carefully protect our knowledge and understanding, and attempt to become monetarily wealthy. It is, perhaps, a choice between freedom and oppression.

Software is one major component of modern communications technology and can either be used to make a few obscenely wealthy and powerful or, in case we decide for FLOSS (Free/Libre Open Source Software), it can bring freedom and prosperity to the whole society.

Areas of Software Development

Below is a rough listing about different areas of software development which can either be directly found on this page or on pages referenced from here:

  1. System requirements (hardware and software)
    • project nature (e.g. military i.e. very particular constraints as well pretty though and strict requirements with regards to the development process and resulting product; e.g. hard real-time)
    • if the project nature allows for various choices, what hardware platform is best respectively need be supported. This often yields to
    • what programming language to choose for a particular task/project
    • etc.
  2. Licensing, intellectual property, warranty
  3. Design patterns (including anti-patterns), mathematics (especially algorithms), statistics, etc.
  4. Life-cycle management
    • Development models e.g. spiral model, cleanroom, extreme programming, etc.
    • Design Documents like for example: URD (User Requirements Document), SRD (Software Requirements Document), ADD (Architectural Design Document), DDD (Detailed Design Document)
    • Project management and ticket/bugtracking system
      • Trac
  5. Managing Code/Data (source code, documentation, binary data, etc.)
    • Collaboration
      • mailing lists
      • some sort of chat e.g. MUC (Multi User Chat), IRC (Internet Relay Chat)
      • collaborative GTD (Getting Things Done)
      • SCM (Software Configuration Management) e.g. GIT
    • Continuous Integration (humans play a major role in terms of doing it or not; tools alone can only do so much as providing us with the means for doing continuous integration)
      • SCM
      • build automation using e.g. BuildBot
      • staging / testbed
    • Software Quality
  6. Working environment
    • OS (Operating System) e.g. DebianGNU/Linux
    • GNU Emacs as an IDE (Integrated Development Environment)
    • Virtualization/Isolation e.g. OpenVZ
  7. Implementing (writing code etc. that is)
    • Naming convention and coding style
    • Syntax best practices
    • Documenting
    • Organizing the code i.e. code hierarchy (packages, modules, etc.)
    • Testing e.g. TDD (Test-driven Development)
  8. Maintenance, adaptation, refactoring
    • Optimization
      • Strategies
      • Profiling
    • Releasing and distributing
    • Deployment and configuration
    • User training and ongoing support strategy
    • etc.

This page is probably of most interest for system administrators and software developers respectively leads in this area — I am explicitly not mentioning for programmers since developing software these days includes a whole lot more than just programming i.e. writing code.

Aside from system administrators and professional software developers, I think anybody who wants to tailor some free-software to fit his needs and to fulfill a certain task can get anything out of this pages and the once linked to from here.

I have to say, I mainly use DebianGNU/* therefore expect everything to be a bit Debian specific. In essence, apart from certain distribution specific CLI (Command Line Interface) commands, the information can be used to apply the tasks to any Linux based distribution or Unix-like OS (Operating System).

Creating Software

This section is about software development. I think I do have various points of view on the matter since I am part developer and/or user to the software I use. In the civil sector, for practical and philosophical reasons, I just do FLOSS (Free/Libre Open Source Software) software matters on my website.

SCM

This subsections tells about SCM (Software Configuration Management) and why it is important. On a regular, I meet folks that develop software without any kind of SCM. That might work for the one-man-show development.

In reality not using SCM is a no-go because in reality there is more than one human working on a project. Mostly folks are not even in the same timezone which means they might have never meet in person.

Long story in short:
Imagine one researcher doing outstanding work towards fundamentals and theory in electrical engineering. He needed to create software in order to run simulations on a computer cluster. First he was on his own. His work became public and a global player in the industry started financing research in the area. With money there also came more manpower. The all created software in order to carry on their research. They where outstanding researchers in the area, had decades of experience but non of them had undergone formal education in software development or had spend years in community driven software development in order to understand the neccesity of using SCM.
It did not take a very long time until they reached the point of no return. The code complexity by manually passing along files and merging code became unsustainable. They lost almost a whole year of work (~14 man years) because they started over the right way — this time with SCM.
In the end, they lost the battle since the multi-million-dollar game had been won by a competing team of researchers although they had the underdog solution from a theoretical point of view. They won because they had a product that was actually already working and made impact on the ground ... Marginal note, the winners used SCM.

This took place in the early nineties — back then SCM was not a common practice in non-software-nerd circles.

Actually, I do not feel the need to go into more detail of explaining why anybody would want to use some sort of SCM. Those who do not know or believe me can start creating software and after a year or so, they will understand. I do have a dedicated page with regards to SCM.

Design Patterns

Project Management Methods

Software Development Techniques

TDD (Test-driven Development)

Miscellaneous

This includes things like management, philosophy, finances, politics, legal matters, ...

Warranty on Software

Warranty on Software a Lie? Wasting good money on something bad?
Free software versus non-free software, Warranty, Support, Management, Money and the 21st century. How in the world does that fit together? Obviously it will take some more decades until management understands some critical points in current software affairs and how to integrate with the free software community. Enjoy the following story a hacker1 has to report on the matter.

1. Among non-technicians the term hacker is often misunderstood (I blame Hollywood and news agencies). A hacker is not a cracker! The latter one is the person who illegally tries to break into computer systems, steal or alter sensitive information etc. Hackers are the good ones — the ones that for example write the Linux kernel.

Creative Commons License
The content of this site is licensed under Creative Commons Attribution-Share Alike 3.0 License.