05 July 2013

Scientific Programming:Of Processors and Software



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:

1)      Observe
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:

1)      Signal processing;
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.

No comments:

Post a Comment