Blog

Chomp

In 2008, I attended a conference in Athens, the 4th Conference on Computability in Europe (CiE), where my student Craig Wilson and I presented a paper that was fun to write, as it examined the algorithmic complexity of a strategy game called Chomp.

Chomp is a two-player strategy game played on a rectangular grid made up of smaller square cells, which can be thought of as the blocks of a chocolate bar. The players take it in turns to choose one block and “eat it” (remove from the board), together with those that are below it and to its right. The top left block is “poisoned” and the player who eats this loses.

This fun paper, turned out to be one of my most cited works, and how the Wikipedia page dedicated to chomp cites it in its references: Chomp – Wikipedia

The paper itself was first published in the conference proceedings, and then in the journal Theory of Computing Systems, 48(3):680-692, 2011:

Keynote speaker at KES2022

I am excited to join a list of distinguished keynote speakers at KES2022!

My abstract: In this talk we are going to examine Data Analytics in the Cloud. In particular, we will demonstrate the data flow for Analytics and Machine Learning, starting with sourcing data (structured, semi-structured and unstructured), pipelining it in both batch mode and streaming, storing it in a Data Lake, and finally making it available to Machine Learning and Business Intelligence. We will illustrate this complex engineering process with examples from Amazon Web Services (AWS).

More information.

4 Great Podcasts

If you have some driving to do, I recommend 4 great podcasts that cover fun and important developments in computer science. The first two are interviews with creators of programming languages; the last two, with creators of communication environments:

  1. Brendan Eich, the creator of JavaScript
  2. David Heinemeier Hansson, the creator of Ruby on Rails
  3. Matt Mullenweg, the creator of WordPress
  4. Jason Citron, the creator of Discord

Brendan Eich is the creator of JavaScript and co-founder of Mozilla and Brave. During the interview, Brendan Eich mentions a great short classic article: The Rise of Worse is Better, by Richard P. Gabriel, written in 1991, and very relevant today for anyone who programs.

In this episode of ACM ByteCast, Rashmi Mohan hosts David Heinemeier Hansson, cofounder and CTO of Basecamp. In addition to his work on this popular project management application, he is also the creator of the open-source web framework Ruby on Rails, used by some of the best-known technology companies, such as Twitter, Shopify, GitHub, Airbnb, and Square, and more than a million other web applications. He is also a prolific author of multiple bestselling books on building and running a successful business, as well as a Le Mans class-winning racecar driver.
David recounts discovering Ruby in the early 2000s and using it to create Basecamp, work which spawned Ruby on Rails. He dives into the process of creating Basecamp, whose aim was to solve the problem of communication with clients, as well as building a self-sustaining community with Ruby on Rails. He also explains his personal approach to open-source software, one of his passions. David also looks back on lessons he learned in business school—including the marketing aspect of technology—and how he applied these lessons to building his own business. He also reveals his experience with remote work and what he’s most excited about for the future.

Matt Mullenweg turned his early passion for blogging into a flourishing business and an unshakeable idea: that users should be able to share and tweak the code that powers their websites, and that most of those tools should be free to use. As far back as college, Matt was collaborating with far-flung fellow-coders to make blogging less clunky and more elegant and intuitive. Around 2005, he pitched the idea for WordPress.com to his bosses at CNET, but they turned him down, so he launched the idea on his own, eventually tucking the service into a nascent umbrella company called Automattic. Today—after many twists and turns—the company has nearly 2000 employees and a valuation of $7 billion; and WordPress powers more than 40% of the websites on the internet. 

During his early career, Jason Citron stepped away from two stalled businesses and pivoted—twice—to something far more successful. The second time he did it, he created one of the most popular social media platforms in the world. It started at age 13 when Jason had a “holy crap” moment, discovering he could make his own video games. His first video game company morphed into a social platform for gamers, and after he sold it, he couldn’t resist launching another. When that business failed to get traction, he again re-imagined it as a digital space for gamers to gather, and in 2015, Discord was born. Today, the platform has 150 million monthly users, and is a gathering place not just for gamers, but for anyone who wants to connect with friends. 

AWS Solutions Architect – Professional certification

Last week I took and passed the AWS Solutions Architect – Professional certification. As to be expected, this is a challenging exam that assumes detailed familiarity with the AWS cloud. However, it is also a very satisfying exam precisely because it goes in depth.

The difficulty is not conceptual, in that the questions reflect the knowledge a computer scientist ought to have; that is, given enough time each question can be answered with strong familiarity with the AWS cloud domains: compute, databases, storage and – especially – networking. The challenge of the exam is twofold: the questions are detail oriented; for example, that Router 53 requires a Type A record for a CloudFormation distribution, but a CNAME record for RDS. And, as there are 75 questions and 3 hours, each question can take at most 2 min and 15 sec. It takes me about 1.5 min to read the question and the answers carefully, and so 45 sec are left to make a decision where one answer is perhaps the outlier, but the other 3 answers are all correct, except that one of them is ideal give the phrasing of the question (e.g., optimize cost or performance efficiency). The point is that the exam tests in depth familiarity with a wide range of services.

How to study for this exam? I am interested, professionally, in the process of exam preparation. I looked briefly at an array of online courses related to this certification: Udemy, TutorialsDojo, O’Reilly, Cantrill and A Cloud Guru. I am impressed by the quality of the materials: videos, slides, tutorials, labs, practice exams. Unfortunately, I was able to set aside very little time to prepare for this exam, and watching long videos was not an option. I preferred to read white papers and AWS console documentation.

One of my favorite books in Computer Science is an old classic: An Introduction to Programming in Emacs Lisp, by Robert J. Chassell. This is such an enjoyable text; yet, the author admits that one of the reviewers of that book wrote the following:

I prefer to learn from reference manuals. I “dive into” each paragraph, and “come up for air” between paragraphs.

I find myself in the same place now, where I have to regularly absorb vast amounts of information, and I prefer succinct presentations without pedagogical aids; just the essential material to be ingested quickly without distractions. That is how I prepared for this exam, using the AWS white papers and other technical documentation.

Understanding Software Engineering Salaries in 2022, in 5 Charts – IEEE Spectrum

Programming in Go, the open-source language, is the most in-demand skill; the cybersecurity talent shortage continues to intensify; and Silicon Valley companies continue to offer the highest salaries, even to their remote workers. And the average U.S. salary for software engineers in 2021 was $156,000 annually, up 1 percent from 2020.

Those are a few of the takeaways from Hired’s 2022 State of Software Engineers report. The online employment-marketplace firm looks each year at its own data; this time around, the assessment included 366,000-plus interactions between companies and software engineers. Hired also conducted a survey of more than 2,000 software engineers to fill in additional details.

Source: Understanding Software Engineering Salaries in 2022, in 5 Charts – IEEE Spectrum

My Computers in the 1980s

My computers in the 1980s

My first computer was a ZX Spectrum+ 48K. I begged my parents to buy one (we were living in Madrid at the time), and finally one day we went to a big supermarket, called Continente (similar to Costco), and we bought this little beauty. It was connected to a TV (we had a black and white at the time), and beside a 48K RAM, the storage was a tape recorder from which I loaded games like Saboteur or Commando. The tape made a sound similar to the gentle purrs of modems that would come some years later.

However, it was not gaming that intrigued me, but programming, in Basic. A friend of the family in Madrid, who studied Mathematics at Cambridge, showed me how to write a subroutine that displayed a spiral computed with trigonometric functions. He new the math, and I knew the Basic commands, and together we created a spiral that I diligently stored on a tape (all tapes with hand written labels, grouped by categories on my shelf – I am 14 at the time).

The families with money had Commodore 64, which was a much better computer. However, whether Spectrum or Commodore, we all had the same challenge: where does one find instructions to write software? Basic was, well basic, but it was possible at the time to write assembler code for these machines, which was needed to write actions games. There were some magazines with code, but it was not unusual to spend a day copying code from a magazine, only to be disappointed at the end; the code was buggy and didn’t work. Adults failed to see the potential, and viewed computers as big calculators with games on them; it wasn’t obvious that these trinkets were ushering a new mode of information exchange.

Finally, at the end of the 1980s, this time in Toronto, we got an Atari, which was really a first personal computer that wasn’t just for hobbyist. It had a word processor, and a graphics application (an early Photoshop called Calamus). The programming language was more advanced, and portable 8 inch floppy disks were an improvement on tape-based storage.

It is true that scarcity brings clarity. These simple computers allowed one to concentrate on the computing essentials (there was little else), and the frugal computing power and memory required inventiveness. The original games for these computers were clever, and therefore complex to write, but managed to create an attractive simulacrum of adventure with little storage and less computing power. They were the perfect toy.

Top programming languages: Java takes an unexpected leap forwards | ZDNet

There’s no shortage of software developer jobs right now and employers are on the lookout for Python, Java and SQL coders in particular, hiring data indicates – with Go also catching the eye of recruiters.

Developer training platform CodingDojo scoured job ads on careers website Indeed to find out which programming languages are in highest demand in 2022.

It found that Python, Java, SQL and JavaScript appeared the most frequently in developer job ads, each appearing in more than 50,000 listings on Indeed. All four saw a significant jump in demand compared to 2020-2021, said CodingDojo: “This makes plenty of sense considering the U.S. economy alone has seen more jobs created in 2021 than any other year on record. While recovery from the events of March 2020 took some time – and in many respects is still happening – computer programming jobs have come back and then some.”

Source: Top programming languages: Java takes an unexpected leap forwards | ZDNet

This tech job has just been crowned the best in the country | ZDNet

Tech and STEM-related jobs offer the best opportunity for jobhunters and career-switchers to find satisfaction in their work, according to new careers data from Glassdoor.

Glassdoor’s 25 Best Jobs List for 2022 found that software developers, data scientists, IT architects and full-stack engineers dominate the top spots when measured by salary, job satisfaction and the number of job openings.

These three factors were taken from ratings from “hundreds of thousands” of employee reviews on the Glassdoor platform, which were combined with the number of role vacancies to create an overall ‘job score’.

Source: This tech job has just been crowned the best in the country | ZDNet

Cloudifying the Curriculum with AWS

My paper, Cloudifying the Curriculum with AWS, was presented at Frontiers in Engineering (FiE) 2021, in Lincoln, Nebraska, October 14, 2021.

Abstract: This is an Innovate Practice Full Paper. The Cloud has become a principal paradigm of computing in the last ten years, and Computer Science curricula must be updated to reflect that reality. This paper examines simple ways to accomplish curriculum cloudification using Amazon Web Services (AWS), for Computer Science and other disciplines such as Business, Communication and Mathematics.

This paper is an expanded version of a technical report (see here). In particular, it contains material related to teaching Machine Learning (see here).

At the same conference, FiE 2021, I was also part of a panel with Joshua C. Nwokeji, Myra Roldan, and Terry Holmes, on A Hands-on Approach to Cloudifying Curriculum in Computing and Engineering Education.

Abstract: The term cloud computing is used to describe a pool of configurable virtualized computing resources (databases, software, storage, network, servers, etc.) delivered as a service via the Internet. The demand for cloud computing professionals continues to increase, yet academic institutions make little effort to integrate cloud computing into the computing curriculum. Lack of cloud computing resources has been identified as a major hindrance to teaching and learning cloud computing in higher education. This workshop aims to explore resources that could help computing educators teach cloud computing to students. Through hands-on activities, participants will learn about the various resources, tools, and technologies that are freely available for teaching and learning cloud computing.