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
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:
- 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.
- Licensing, intellectual property, warranty
- Design patterns (including anti-patterns), mathematics (especially
algorithms), statistics, etc.
- 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
- 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)
- Software Quality
- Working environment
- OS (Operating System) e.g. DebianGNU/Linux
- GNU Emacs as an IDE (Integrated Development Environment)
- Virtualization/Isolation e.g. OpenVZ
- 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)
- Maintenance, adaptation, refactoring
- Optimization
- 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
hacker has to report on the matter.
|