"The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do."
-- unsure; often attributed without source to information philosopher Ted Nelson
The most basic choice in software development is what programming language or languages to use. This is a matter of personal preference, rising to the level of religion among some programmers. However, there are important considerations:
How widely will the software be distributed? Bourne shell scripting and ANSI standard C are the most commonly supported languages across all Unix-like platforms, so they are good choices for maximum portability. Perl scripting and C++ have reasonably wide support. Other languages might require the user to install special compilers or other software, which may not be available for all systems.
Does the language encourage good programming practices? Compiled, strongly-typed object-oriented languages like C++ shine in this area. Scripting languages tend to be weak, with Perl being an especially prominent example of a poorly designed language.
Is performance an issue? Compiled languages are more efficient than interpreted languages. C can be highly efficient. For most user applications, squeezing a few CPU cycles or memory bytes isn't that important on modern computers. However, high-load server applications, and libraries that will be used by other applications, should take performance into consideration.
Does the language have special features applicable to your purpose? For example, some programmers like to use GUI scripting languages to simplify interface development.
Do you already know the language? This tends the most important criteria real human beings use. ;-)
After choosing a programming language, the next major choice is choosing the development platform(s). For many programmers, the choice is restricted to what happens to be in front of them. Any Unix-like operating system, enhanced by GNU development tools, provides a decent development environment.
Some programs will necessarily be specific to one or a few operating systems, due to requiring special operating system features. However, most programs benefit from minimizing their use of OS-specific features.
See the guidelines for Installing and Portability for practices that will help minimize system dependence.
There aren't many security considerations in language choice. However, bugs are potential security holes, so any language that promotes good programming practices is better from a security perspective.