Software Development

We are scientists and egnieers whose passion is to make the world better, smarter and healthier

Software Development refers to a set of computer science activities dedicated to the process of creating, designing, deploying and supporting software. At C X-Stream, software development addresses all facets of writing and running software code.

While development involves the tools, methodologies and processes necessary to create software, it also concerns the code and algorithms that physicists, device fabricators, service scientists, chemists and hardware makers need to write in the course of doing their work. That is, software development also involves the activities of skilled individuals who develop project-specific software code even though they themselves are not primarily software developers.

Indeed, some 90 percent of Services-oriented technology depends on using software development skills. About 80 percent of Systems-oriented technology and 5 percent of hardware makers also use these skills to create models and flesh out ideas. The main goal of these software operations, however, is not the development of code. Instead code is generated in order to create services or products that will be delivered to the enterprise or consumer market. Software developers come into the picture when they take this "raw" code, run and test it, correct errors and further develop it.

Areas of expertise:

Algorithms & Theory: In computer systems, an algorithm is basically an instance of logic written in software by software developers to be effective for the intended "target" computer(s) to produce output from given (perhaps null) input. An optimal algorithm, even running in old hardware, would produce faster results than a non-optimal (higher time complexity) algorithm for the same purpose, running in more efficient hardware; that is why algorithms, like computer hardware, are considered technology. Some examples are binary search, quicksort, backtracking, hash tables, linear congruential generator and Mersenne Twister, Linear least squares, Karatsuba algorithm, and the divide and conquer for Matrix multiplication.

Distributed and Fault-Tolerant Computing: We use Storm, a free and open source distributed realtime computation system. Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing what Hadoop did for batch processing. Storm is simple, can be used with any programming language, and is a lot of fun to use! We have experience with many use cases: realtime analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. We are fast: a benchmark clocked it at over a million tuples processed per second per node. We are acalable, fault-tolerant, guarantees your data will be processed, and is easy to set up and operate. We can be integrated with the queueing and database technologies you already use. Our topology consumes streams of data and processes those streams in arbitrarily complex ways, repartitioning the streams between each stage of the computation however needed.

Human Computer Interaction and User Interface Technologies: Human-Computer Interaction (HCI) is a field of study focusing on the design of computer technology and, in particular, the interaction between humans (the users) and computers. It encompasses multiple disciplines, such as computer science, cognitive science, and human-factors engineering. While initially concerned with computers, HCI has since expanded to cover almost all forms of information technology design.

Programming Languages and Software Engineering: Computer software engineers apply the principles and techniques of computer science, engineering, and mathematical analysis to the design, development, testing, and evaluation of the software and the systems that enable computers to perform their many applications. Software engineers are involved in the design and development of many types of software, including software for operating systems and network distribution, and software for compilers (which convert programs for execution on a computer). In programming, or coding, software engineers instruct a computer, line by line, how to perform a desired function. Software engineers must possess strong programming skills, but are often more concerned with developing algorithms and analyzing and solving programming problems than with actually writing code. Typically Software engineers, working in applications or systems development, analyze first the needs of the user. They then design, construct, test, and maintain computer applications software or systems to meet these needs.