Every programming language has its own set of constructs for any given feature.
Each feature of a language is implemented based on the available resources and the underlying assumptions of the language.
If one wants to have a table of elements with a key, one finds this feature supported in various ways in most modern languages. In a language like C, however, one ends up making one’s own implementation.
The behavior and information of a program is usually seen and controlled at either the time of compiling or at runtime.
For compiled languages, attributes and types cannot be manipulated dynamically to the them extent it can be for a language like Python.
The danger of uninhibited runtime manipulation is it may lead to indeterminate behavior.
Coding is said to be a great exercise of the brain:
Occasionally, it even involves the brawn;
More often than not, we try with the results to make it rain;
Great is the feeling when the job gets done when gets called the main()!
A programming language usually defines numerous base types for it’s variables. Examples include strings and integers.
In most languages, there is a need for an all-encompassing type of variable that, in theory, can store any value.
This type is variously defined as the union type, the void pointer or the empty interface in different languages. In a duck typed language such as Python, all variables can take on any type based on runtime usage.
In producing schemas for data, one is attempting to indicate the meta structure of data in a machine readable way.
In order to ensure this process works, one needs a good toolchain that works from end to end with few compatibility issues.
Any tool that is written as part of this has to, in turn, follow the grammar as prescribed in the predefined rules and produce good logging and messages.
In writing code in programming languages that rely on being compiled into binary format, there results dependencies on the compiler toolchain being present on the OS system.
In newer languages such as Python and Java, an abstraction layer is created on top of the OS system.
This layer allows for great portability, which is one of the most crucial features of a software which is desired to be deployed widely.
In a limited resource system like an embedded system, one may sometimes find that having a single process to run the code in is the only possibility.
As resources increase, it could be possible to improve process management to allow multiple threads of execution inside a process.
A well designed, multithreaded application usually has good performance as it can parallelize some of the operations.
Information is one of the key aspects of life that has become ubiquitous.
This information is being presented to both users and computers.
When it comes to computers, information needs to be structured well and the meta structure of the data needs to be known in advance.
Displaying human readable output is a great feature of any program.
Logging messages and console outputs usually prove helpful to any operator or user.
The world of programming has had much efforts over the years to standardize technologies and protocols to provide easy interoperability.
However the reality has been that each vendor’s implementation has had its own quirks and incompatibilities with standards.
It is important for softwares to make it clear upfront regarding exactly where they deviate from the standard.