Hello everyone. I was hoping to post this some weeks ago,
but, pardonnez-moi, I had a lot on my hands: Visual problems, plus moving
residence (for the nth time), to say the least. Sorting, packing: I think you
know that last one. At any rate, here in my new abode, I had to do some
unpacking and getting stuff in order. Whew! In addition, I had to undergo laser treatment
for my right eye. My vision is quite a lot better. I still have to manage my
scientific bearings though. Not to mention my app development project, which I
hope to monetize. So here we go with our topic for this week or so: Scientific
Programming.
Processor Challenges
The evolution of microprocessor technology is upon us.
Financial straits, partly due to the decrease in sales of PCs, and power constraints
are driving companies to maximize IC space related to better energy efficiency.
Maybe the consumer production ICs for PCs are following a downward trend. However, big
machines plus big data are enabling big-time computer setups and startups. The mobile
environment is changing the computing landscape. But I still have to see a
tablet that can process petabytes of data using 16-core computing power, in
addition to linking all the servers that big search giants can enable. The
mobile device, to me, is at this point, a window to the sky. Big machines are
here to stay. Meanwhile, we still have to build bigger and better programs in
the name of discovery of better treatments and the improvement of health care.
Even now, not all Medical Centers or clinics can afford electronic health
records, let alone the qualification for big brother’s reimbursements. We’ll
leave politics to the experts. Our concern is with programs and the development
systems for discovery, diagnoses, and streamlined systems. So let’s move on in
that direction.
Corpus
A scientific understanding of the physical world has allowed
us to interact with a multitude of aspects of life, whether our own, or of our
environment. In so doing, we have been able to improve the lives of countless
individuals, by adding unique properties, or by correcting deficiencies. This
has not come about in one big chunk but rather in incremental steps in the
informatics evolution. We are getting better at understanding homeostasis and
the elements that disturb it. While we have not yet modelled “feeling good” in
the computer laboratory, it has become clear that the various organ systems are
involved in a tightly knit web of actions and interactions. As a matter of
fact, we can now “imitate” nature in the process known as cloning. At least we
had an idea of cloning via the Star Wars saga.
For now though, we will just concern ourselves with the
representation of biologic processes and interventions through scientific coding
or programming. Curiously, one can ask if there is a difference between
computing for science and computing for banking, or even computing for internet
media (music anyone?). Well, it is at
this juncture that we can see the differences between the structures and
functions in each cell-tissue-organ-body system and an online bookstore giant.
There is a striking similarity though (analogous, if you will) between an air traffic
controller’s job and that of our brain’s. There is also a similarity between the
cardiovascular system and a city, with all its inhabitants, buildings and
thoroughfares.
Let’s remember that regardless of the computational
platform, the essence is to enhance the Scientific Process:
2) Question
3) Hypothesize
4) Experiment
5) Conclude
6) Communicate
Programming software
How well one represents different systems in the body
depends on both the skill of the programmer and the programming language used. The
evolution of computer languages started with a mathematically stringent code,
and as in mathematics, depends a lot on the terse symbolisms used. Anyone
familiar with FORTRAN (derived from “Formula Translator”)
will know, parenthetical operations are as important as the keywords and
syntax. In the 90s, FORTRAN was the predominant programming language for
numeric and most scientific applications, the version then being Fortran-77 and
supercomputers were primarily used to run large-scale numeric and scientific
applications. While FORTRAN is still used for “heavy duty” programming, there
is now more competition in the C family of languages, as well as Python (more
on that later in this series). BASIC was derived from FORTRAN, but tried to
make it easier to code, and, as a result, many people start learning
programming via the former. As a matter of fact, many have settled on and even
still monetize their BASIC programs, such as in the multitude of add-ons for
the Microsoft Office Suite, definitely no small feat in the commerce of
computing. Then came Pascal, FORTH, the C family, Java, Python (examples of
high-level languages): the list goes on. Of course, there is Assembly Language,
a low-level language, which “speaks directly” to the CPU. Many linguistic
features are shared by the different languages, however, one may have more
benefits than the other for a particular purpose. The latter may depend a lot on the computing job to be
built. There are at least 50 programming languages available, and their
individual popularities can be surveyed at the Tiobe website here. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Choosing which one to use depends on each one’s familiarity
with the language’s structure, syntax, and level of learning and maintenance difficulty.
There are proponents for every language, and their takes on each one’s utility
varies of course. If one were to work with signal analysis, a language’s
ability to interface patient subject and equipment is tantamount in importance.
In this respect, there are software packages that take full advantage of the
complex waveforms and then perform tasks available in the software modules. These
modules are also sometimes called toolboxes.
Among the applications these
software packages are capable of performing and/or facilitating are:
2) Numerical data analysis;
3) Modelling;
4) Simulation;
5) Computer graphic visualization;
6) Robotics; and
7) Computer/Machine vision.
One such software package is MATLAB (matrix laboratory) /Simulink, where a
programmer can also write program routines for a specialized purpose. LabVIEW is another such platform. Maple and Mathematica can also handle operations in
scientific computing. If one individual, or group, needs its own home-grown
procedures, then a good knowledge of programming language/s is essential.
Another factor that is important in scientific programming, is
the mode of data transfer from user to software (as well as computing machine)
and back. Will it be an online app, or an offline one? Will it be embedded in the measuring unit
itself (such as an ICU monitor), or is it an interface between machine and
patient/subject. The bottom line, as it turns out, is shortening the path
between source of data and the user: The quicker, the better. With the
continuous evolution of microprocessors, the need for speed of number crunching
and analysis is always at our doorstep. The accumulation of data and the “Big
Data” environment will put strain on man and machine. It’s not just a cold
machine doing the work when it’s turned on, but also the efficiency of the
program, and the professional performing the crunching and analysis
There are four (4) basic characteristics to be understood
regarding the better programming language/software environment:
1) Learnability - Is the learning curve acceptable? ;
2) Usability - Is the language/software environment best for the purpose? ;
3) Maintainability - Is the language/software project easy to maintain? ;
4) Portability – Is the language/software multiplatform (can it be adapted for an Operating System other than the native)?
The aforementioned factors will be of prime importance to at
least four parties:
- A) Developer (individual, or team);
- B) Testing/Quality Assurance team;
- C) Distribution team;
- D) Marketing team (if a commercial project is considered.
Optimization of available technology to digest all the
information is therefore the first goal of scientific computing. There is also needed
necessary ability to identify and quantify technical defects in the whole
man-machine interface. Who will judge a technology’s quality? The most common
deficiencies in the technology we easily detect. If a heart rate monitor says
you have a pulse of 3000, we know there’s something wrong. That is why software
programmers have to put their programs to meticulous testing stages. And if
the error escapes our detection we have to be continuously on the test, verify,
correct and improve the system race track. In a
way, program error detection starts with the identification by tracing our
steps back to the beginning of the problem. Nowadays, there is a rise in
malicious code which can seriously impede an application’s functions. Web
applications are a burgeoning way of delivery of functionality for a wide
variety of programs. However, it is turning out to be also a major point of
vulnerability in organizations today.
Definitely, the line between embedded software and systems
for offline analyses is blurring. The ubiquity of mobile devices is also
widening the user base. From a telemedicine thermometer patch on your forehead,
to the analyses of data to determine the incidence of isolated systolic hypertension
in each town of the European Union, one will have no choice but to improve the
abilities of our wits. And likewise improve health outcomes. No question about
that.
Great links to visit on this subject:
Programming4scientists.com: http://www.programming4scientists.com/
Scientific Sentence.net: http://scientificsentence.net/
What is Scientific Programming?:http://www.linuxforu.com/2011/05/what-is-scientific-programming/
Have a great day- and listen to the music...
Fernando Yaakov Lalana, M.D.