Sunday, December 22, 2019

A review of my CMSC 131 class offering

Last semester I taught, for the first time, the Introduction to Computer Organization and Machine Level Programming course for undergrads. Traditionally this course mainly teaches students x86 (32-bit) assembly language programming in an Ubuntu environment using NASM. I decided to "upgrade" the course by directing the course towards systems programming and introducing x86-64 assembly language. My main reason for the upgrade is to prepare the students for their Operating Systems class which they will take later and which I also teach. In order to achieve this goal, I needed textbooks to guide me which led me to use the following:
CS:APP was created by professors from CMU and is widely used in many top universities. I used the slides provided by the book. But in my lectures, I have several open terminals to demonstrate the actual operation of the codes. ALPU is a good book also with simple exercises at the end of each chapter.

The topics (based on the CS:APP2e contents) I was able to cover in the lecture are the following:
  • A tour of computer systems
  • Representing and manipulating information
  • Machine-level representation of programs
  • Memory hierarchy
  • Linking

In the lab, I was able to cover most of the chapters in ALPU, excluding DDD, Macros, Stack Buffer Overflow, I/O Buffering, Floating Point, and Parallel Processing.

I introduced GDB in the lab to help students debug their programs. I also used GitHub Classroom for distributing boilerplate code and code submission.

In my lectures,  the emphasis is on how the GCC compiler translates C source code into assembly language and how the processor executes the machine code. I always have terminals open to fire up GCC and GDB during lectures.

For future improvement of the offering of this course, I recommend the following:
  • Use same syntax in both the lecture and lab. CS:APP2e uses AT&T syntax while ALPU uses Intel syntax.
  • CS:APP2e is still 32-bit with a little introduction to 64-bit. It may be possible to use the 3rd edition which I believe is purely 64-bit.
  • Most of the programming exercises do not accept input and produce output interactively. A GDB command/script file can be used to provide input and produce output by explicitly stating the variable names, memory addresses, or registers. Checking of programming exercises can be automated using GDB command scripts.
  • Introduce assembly language programming in Windows environments using Microsoft Native Build Tools.
  • Introduce ARM assembly language programming using an emulator or RPi.

I would like to thank Prof. Rizza DC. Mercado and Prof. Kendall Jaen for sharing their teaching materials. It was fun teaching this course and I learned some new topics in depth.

Saturday, December 21, 2019

How to determine research potential

(Last update: 19 January 2024)

As professors, we are often on the lookout for graduate/undergraduate students (or junior faculty) with research potential to join our research groups.  We want to encourage these students to pursue graduate studies in order to further advance the field by becoming researchers or professors in the future.

We base our evaluation initially on their grades from the courses they took. Our belief/claim is that the higher the General Weighted Average (GWA) of a student, the higher the research potential.  

Research potential, as described in Costromina et. al. (2014), is a multidimensional and multilayered system of individual psychological traits (motivational, cognitive, and behavioral characteristics) that act together to allow an individual to conduct research activity efficiently and fruitfully.  These traits are described below:


  • Intolerance for ambiguity - capacity to experience positive feelings in new, unstructured, and varied situations
  • Satisfaction in solving problems - capacity to feel gratification from the process of finding ways and means for coping with scientific tasks
  • Intellectual curiosity - the conscious desire to receive information about objects and to enjoy learning
  • Intolerance for novelty - reveals thirst for experimentation, innovations, etc.


  • Flexible thinking - can overcome conventional thinking
  • Critical thinking - capacity to reveal mistakes and inconsistency, to correct errors, justify the validity of hypothesis
  • Logical thinking - ability to use facts and laws to confirm the accuracy of conclusions promptly
  • Quick thinking - ability to understand the situation and to make decisions in a timely manner
  • Original thinking - capacity to propose new, unconventional ideas


  • Self-organization - structuring of a researcher's personal activity to reach objectives
  • Self-control - following research procedures and completing work tasks
  • Adaptability - reduces time necessary to accept the changing conditions of a research task
  • Assertiveness - maintaining stability while working in unstable conditions

Costromina et. al. (2014) conducted a study to compare undergraduates, master's students, and professors along the above dimensions. In their conclusion, they were able to obtain data on the high predictive validity of theoretical abilities in defining students' level of research potential.

"Theoretical thinking abilities are the aggregate of analytical and synthesizing
skills aimed at identifying common features and qualities of objects, as well as abili-
ties aimed at generalization and abstract thinking. These abilities function at a high
level along with a broad vocabulary range, and they reflect one’s ability to think in
the abstract."

At the undergraduate level, intolerance for novelty, self-control, adaptability, assertiveness and critical thinking are the characteristics that should have been developed, according to the study.

It seems, therefore, that the use of GWA as first screener of a student's research potential is valid. In addition however, a student should also be evaluated based on the traits described above.