For most students, computer science means lots of high-level coding, screens with black backgrounds and green text, and an esoteric subject. When students hear the term computer science, many think about programming languages – Java, C++, Python to name a few. However, what those students are really thinking about is computer programming, an extension and application of computer science. Computer science uses code and programming languages and different numerical systems, but computer science itself is the study of logic, efficiency, and problem solving. With that, it is worth examining what the world of computer science truly encompasses and what purposes it serves to study computer science.

Continue reading

# API Evaluation

API is the initials of “Application Programming Interface”. APIs are bundles of interfaces that developers must implement to build their applications. Common APIs are the Java, Python, and Ruby APIs, as well as the Android, iOS APIs and many other third-party libraries (e.g. jQuery and Google maps). Except for their source code, APIs come with their documentation. Then, client developers, from different programming levels, read this documentation to build distinct applications that use the same APIs. This means that an API should be unambiguous and useful in order to prevent developers from writing applications susceptible to crashes.

# Open Source in Education

As mentioned in a previous post by Maria Kechagia, “Free, Libre and Open Source Software (FLOSS) is software released under a license that allows developers to: 1) access the software’s source code, 2) use the software for free, and 3) develop derived works based on software’s previous releases.” FLOSS software is very versatile and can be used for a variety of purposes. One such purpose is education and institutional learning, a world in which software and technology is prevalent. However, at the present day institutions of learning (i.e., from high school up to university) mostly use commercial software such as Microsoft Office and Adobe Photoshop. Meanwhile, open source software such as OpenOffice, GIMP, and Linux offer the same capabilities as their commercial counterparts, yet are not employed as much. Weighing the options, it becomes clear that educational institutions should move to using more FLOSS software. Why? Let’s review the benefits for students.

Continue reading

# How Connected are Quantum Graphs?

Some students in my department this quarter hosted a reading group on quantum computing. Quantum computing is becoming more and more relevant and the topic attracted the participation of a diverse group of researchers. The best way to handle the scope of the topic and diversity of the participants was to invite volunteer speakers to give talks on the quantum analog of their own research area — “Quantum Circuit Lower Bounds,” “Quantum Game Theory,” and “QPSPACE” were among some of the topics. Naturally, I saw this as a great opportunity to understand more about quantum spectral graph theory. In this post I will outline some basic definitions and properties of quantum graphs, and as a follow up to my previous post on the connections between spectral geometry and graph theory, discuss isospectral properties of discrete and quantum graphs. Continue reading

# Why to Get Involved in the Open Source Community?

Free, Libre and Open Source Software (**FLOSS**) is software released under a license that allows developers to: 1) access the software’s source code, 2) use the software for free, and 3) develop derived works based on software’s previous releases. FLOSS’s success can be attributed to the motivations of the individuals that are members of the open source community. However, FLOSS’s recent boom is also associated with the adoption of many business models, which rely on FLOSS, by modern companies. The aim of this post is to summarize the reasons that make individuals and companies to participate in the open source community and highlight the impact of FLOSS projects on computer science. To name some of the most popular FLOSS projects, consider: the Eclipse IDE, the Firefox browser, the Apache server, the Linux kernel, the Java, C/C++, Python programming languages, the MySQL, SQLite, PostgreSQL databases, the GNOME and KDE desktop environments, the Git version control system, the R-Project for statistical computing, the TeX system for publishing, etc.

# The Geometric Origins of Spectral Graph Theory

Spectral graph theory is the study of the intimate relationship of eigenvalues to different properties of graphs. Most typically the eigenvalues are associated to eigenfunctions of matrices associated to graphs known as Laplacians. Let $latex G = (V, E)$ be a weighted or unweighted undirected graph (there are simple extensions to directed graphs for many problems). Let $latex A$ be the adjacency matrix and let $latex D$ be the diagonal degree matrix, that is, $latex (D)_{ii} = d_i$, the degree of vertex $latex i$. Then a common definition for the Laplacian is $latex L = D-A$.

As I develop in my research in spectral graph theory, I am consistently amazed by the truth that many results in spectral graph theory can be seen as discrete analogues to results in spectral geometry. I am not accustomed to thinking of graphs as geometric objects, but in fact graph Laplacian matrices are nicely related to Laplace operators on Riemannian manifolds. In this post, I’d like to discuss a few of these relationships. Continue reading

# Language Bureaucracy

Laziness, impatience and hubris are the three great virtues that each programmer should have, at least according to Larry Wall [1]. My experience so far showed me that he was right. All programmers have these characteristics, if they do not, usually they are not **real** programmers. Since they are expressing these values with the usage of several programming languages, they tend to compare them. Usually this comparison ends up with a phenomenon called flame wars. The programmers are participating in endless quarrels, exchanging arguments regarding language features, their standard (or not) libraries, etc. Continue reading

# Big Data, Communication and Lower Bounds

As the size of the available data increases, massive data sets cannot be stored in their entirety in memory of a single machine. Furthermore due to the small amount of memory and computation power available on a single node, one needs to distribute the data and computation among multiple machines when processing tasks.

However, transferring the big data is very expensive. In fact, it is more expensive than the computations on the datasets. Thus, in the distributed model, the amount of communication plays an important role in the total cost of an algorithm and the aim is to minimize the amount of communication among processors (CPUs). This is one of the main motivations to study the theory of Communication Complexity, which originates from Big Data processing. Continue reading

# Software Packages for Theoreticians by Theoreticians

Brown University’s ICERM recently hosted a workshop titled “Electrical Flows, Graph Laplacians, and Algorithms,” where top researchers convened to present and discuss their recent progress in spectral graph theory and algorithms. Richard Peng opened up the workshop with an overview talk on efficient solvers for linear systems with graph Laplacians as the coefficient matrix. He presented a thorough history of the topic and set the stage for the variety of technical talks on fast algorithms for graph sparsification, spectral clustering, computing max flow, as well as a variety of other local and approximation algorithms.

His talk (as well as many of the rest) are archived and available thanks to ICERM. I will focus on one highlight – a point that resonated with the conclusion of Richard Peng’s talk – a call for more software implementing these new, fast algorithms. In this light, I’d like to briefly discuss some of the software packages out there for spectral graph theory and the analysis of large graphs being developed by theoreticians active in the area. Continue reading

# How You Can Be Part of the Future of Computing

With 50 years of history behind IBM’s mainframe computers, these powerful machines are here to stay. IBM has been making a continuous push to encourage industry and educational institutions to adopt this technology, and provide more educational tools and resources to teach mainframe computing.

In celebration of IBM’s Mainframe 50^{th} Anniversary, this year’s Master the Mainframe competition was one of a kind. This was not only the first World Championship, but a record number of students participated—about 20,000 students from all over the world competed over a three-month period. Those who qualified completed all three stages of the competition; but only the top 43 contestants with the highest scores were invited to the World Championship. Continue reading