Grace Murray Hopper – A computer pioneer

Grace Hopper was a computer pioneer and one of the first programmers. I just finished reading the book “Grace Murray Hopper: Working to create the future” by Carl J Schneider, and I’d like to share some of my takeaways with you.

Early life

Grace was born in New York City in 1906, well ahead of the computerization of the world. From a young age, she was an avid learner with an affinity for mathematics. In 1928 she graduated from Vassar College with a B.A. in mathematics and physics. Six years later she earned a Ph.D. in mathematics and mathematical physics at Yale. This was a rare accomplishment for a woman back in those days.

Even though she was very strong in theoretical matters, she was always looking for practical applications of her knowledge. As a teacher, she invested a lot of effort into showing her students how the theories she taught could be used to solve everyday problems.

One of my favorite quotes of the book is:

“I will never stop learning, because I have an insatiable curiosity. People who don’t keep on learning, die.”

Grace Hopper

The Mark computers

During World War II, Grace joined the U.S. Navy. The first order she received in 1944 was to join Commander Howard Aiken, Navy Bureau of Ordnance Computation Project, Harvard University, whose team was working on the large-scale digital computer Mark I.

“I always loved a good gadget. When I met Mark I, it was the biggest, fanciest gadget I’d ever seen. I had to find out how it worked.”

Grace Hopper

Grace was one of the programmers who worked on the computer. The programs created by the Harvard team were used to calculate tables to help naval gunners in aiming and for other military applications.

When Grace was working on troubleshooting the Mark II computer, she carried out the first “debugging” session in computer history. She removed a moth from the computer with tweezers after having found the bug with her purse mirror. As a modern-day programmer, I’m happy that I never have to debug at such a low level.

Commercial computing

In 1949 Grace joined the Eckert-Mauchly Corporation to work on the UNIVAC. This computer was developed for commercial applications, and was 1,000 times faster than the Mark I. Grace was looking for commercial applications of the computer by asking the questions “Can you find a way to make the computer do what you’re doing now by hand?” And, “Now we know we have this powerful thing here, what new problem could be solved with this?”

There weren’t many programmers around at this time in history, and Grace recruited her programmers from a pool of people who liked so solve crossword puzzles and read mystery stories. If she was able to identify problem-solving capabilities in them, she was sure that she would be able to teach them how to program.

In 1952, Grace was frustrated by the error-prone process of copying certain blocks of code manually. To avoid the copy-paste errors the programmers were repeatedly doing, she encouraged them to put the commonly used blocks of code into a shared library. She went on to create a program to translate the blocks of code into machine language, effectively creating the first compiler.

Grace wanted to create a more high-level compiler and a programming language using English words. In 1957, the efforts of Grace and her team resulted in FLOW-MATIC, which was the first English-like programming language. The language helped the UNIVAC understand twenty English statements. FLOW-MATIC had a strong influence on the development of COBOL, which resulted in Grace being named “the grand-mother of COBOL”.

Final thoughts

Grace Hopper was very influential as one of the first programmers of the world. She also helped to widen the areas of application of computers. I found her story to be inspirational, and I recommend you to familiarize yourself with her achievements during the child-hood of computing. She had an exploratory mindset and a liberal management style. I’d like to end with the following quote:

“Liberate what we need. Set it free. It’s easier to apologize after you do something than to ask permission to do it.”

Grace Hopper

How you can stay up-to-date through MOOCs

In this post, I’ll share with you how you can use MOOCs to stay up-to-date with your field and acquire new skills. I’ll also share some of my experiences after having completed about 30 MOOCs in the last year and a half.

What is a MOOC?

Let us start with the basics. According to Wikipedia, MOOC is defined as:

A massive open online course (MOOC /muːk/) is an online course aimed at unlimited participation and open access via the web.

Wikipedia

MOOCs are a kind of distance education where you can consume the learning content whenever and wherever it suits you. A MOOC is typically built with the following building blocks:

  • Video lectures
  • Self-tests
  • Assignments (weekly / finals)
  • Collaborative projects
  • Discussion forums
  • Downloads (videos, slides, and transcripts)

The following mind-map by Mathieu Plourde (Mathplourde on Flickr) [CC BY 2.0] gives a nice overview of the concept and the flexibility of its implementation:

MOOC poster mathplourde

My first contact with MOOCs

I stumbled into the world of MOOCs in February 2018 after having found the MOOC platform of SAP, named openSAP. SAP was offering a technical course on test-driven development in the programming language ABAP, which I enrolled for. The course was great, and it changed how I keep up to date as a developer.

What can you use MOOCs to learn?

The MOOCs I’ve attended mainly fall into the following three categories:

  1. Technical skills
  2. Thought leaders
  3. New products and solutions

Technical skills

Being a developer, I always look for material to expand and improve my technical skills. This can be anything from learning a new programming language or a test framework to learning about a new NoSQL database.

The courses I’ve attended in this category typically consist of a lot of coding exercises, which for me personally is a very good way of learning. MOOCs that fall into this category are typically the most work-intensive.

Thought leaders

As a developer, it is important to widen your perspective and be aware of greater trends in technology and society. Attending MOOCs within this space helps you to keep up with new business practices, and the lecturers are typically business and academic thought leaders as well as top politicians.

New products and solutions

When working with enterprise software, you as a developer will often be asked by your customers about new products and solutions which they have heard about. Even if you have not yet had the opportunity to do hands-on work with these products and solutions, I recommend attending MOOCs within this area to at least have an overview of which scenarios the solutions are applicable to.

When and how I consume MOOCs

The major advantage of MOOCs over traditional classroom training as I see it is that you can consume the course content whenever it suits your personal schedule.

I have a daily subway commute of about 45 minutes in total. As long as I can find a seat, I think that this is an ideal opportunity to use MOOCs. The MOOCs I’ve attended typically have units with a length of approximately 20 minutes, which means that I can squeeze in two units a day, just going to work and back. I find this to be a much more productive use of my time than just scrolling through social media posts or playing games on my phone.

The assignments typically require at least an hour of focused work and are not ideal for my commute. I typically do the assignments when the rest of the family is sleeping.

Nice side-effects of attending MOOCs

Apart from the learning itself, which is, of course, the most important part of attending MOOCs, I’ve encountered the following nice side-effects:

  • Certificates and badges to put on your LinkedIn profile: If you receive a certificate or a badge, make sure to put it on your LinkedIn profile. Since the words of the MOOC are searchable, people looking to connect with people with a certain skill will find you through these search terms.
  • Free books: In one MOOC I attended, the teachers were publishing a book on the topic simultaneously to bringing out the MOOC. Since I was one of the top 30 students of the course, I received a free copy of the book in hardcover.
  • Discount coupons: Several MOOCs I’ve attended have given me a discount coupon at the end of the course. The coupons have been for books, conferences and paid e-learnings.
  • Invitations to conferences: Just the other day, I received an invitation to attend a conference on a topic for which I had attended a MOOC. I’d still need to pay for the conference, but I wouldn’t have been aware of the conference if I hadn’t attended the MOOC.

Potential downsides to attending MOOCs

The potential downsides I’ve encountered when attending MOOCs are the following:

  • Opportunity cost: When attending a MOOC, there is an opportunity cost. I’ve noticed that I’ve read fewer books when attending MOOCs due to time constraints. Make sure that the courses you are attending are really worth the time investment you are making.
  • Marketing material in disguise: A few of the MOOCs I’ve attended have been little more than sales pitches and marketing material from a software vendor trying to push a new product. This becomes obvious at an early stage, so don’t hesitate to drop out of a course with these characteristics. I’ve come across these courses mainly in the new products and solutions category.

MOOC platforms

There are a lot of MOOC platforms out there. I just want to give you a few examples to get you started. If you have any recommendations, please feel free to share them in the comments section below.

freeCodeCamp

At freecodecamp.org you can attend an online coding boot camp completely free of charge. The focus is mainly on front end web development with courses on topics such as responsive web design, JavaScript, front end libraries, and APIs. There are a lot of hands-on coding exercises available.

openSAP

At open.sap.com there are hundreds of courses available. Many of them are focused on SAP specific solutions and technologies, but there are also a lot of general courses available. Some examples are courses on Java, Snap!, design thinking, digital transformation, and AI. The courses are offered free of charge to anyone interested.

Udacity

At udacity.com you can acquire tech skills within different areas, like programming and development, AI, cloud computing, and data science. I’ve only taken a JavaScript course at Udacity, and am not all too familiar with the platform.

Final words

I hope you enjoyed reading my thoughts and experiences around the topic of MOOCs. Let me know your thoughts in the comment section. I plan to write a follow-up post with my favorite MOOCs attended so far. Happy learning!

Computer Science concepts you can learn from block-based programming

I have signed up to volunteer for the Swedish nonprofit organization Kodcentrum this autumn. Kodcentrum introduces kids to programming and digital creation free-of-charge. We will be using Scratch in the coding labs, and I’ve played around with Scratch previously on a couple of occasions.

A course on Snap!

To prepare myself for the volunteering, I signed up for the MOOC Programmieren mit Snap!, which was offered free-of-charge by openSAP this summer. Snap! is an extended re-implementation of Scratch and the two languages as very similar. The user creates programs in a visual drag-and-drop environment.

The course took about ten hours to complete, and I’m impressed by how much content and how many fundamental as well as more advanced computer science concepts the instructors were able to explain and demonstrate.

Concepts covered

Let’s have a brief look at the concepts covered.

Fundamentals

A lot of the fundamentals were illustrated by creating images and art. The first example illustrated positioning, loops, and visual effects by creating a digital wildflower meadow.

The basics of color theory were explained in an exercise to create geometrical forms of different types and colors. I found it interesting that Snap! uses HSV (hue, saturation, value) instead of the RGB color model, which I’m more familiar with. According to Wikipedia, HSV was “designed in the 1970s by computer graphics researchers to more closely align with the way human vision perceives color-making attributes.”

The use of variables was introduced in the context of for-loops, and the outcome was spirals of different sizes and forms. At a later stage, lists were introduced for grouping several related values.

Advanced concepts

The principle of parallel computing was introduced by letting the student create a simple drawing program, in which the user creates two mirrored images by having two scripts executing in parallel.

Messaging between objects was introduced by creating a simple game where a character navigates through a maze. The objects communicated when something happened in the game loop.

A Sierpiński triangle was created by applying a chaos game method. Fractals and emergence were also introduced. There are really a lot of interesting graphical representations which can be generated by a very small amount of code.

Snap! can be used for more advanced use cases by importing libraries. A neat example was the use of a text-to-speech library for generating and reading out loud different newspaper headlines.

Cloning was used to create somewhat psychedelic graphical animations.

As you see, a lot of ground was covered already, but no computer science programming introduction is complete without introducing the student to recursion. I really enjoyed this part of the course, and the output was a tree image with very detailed branches.

Conclusion

I was familiar with most of the concepts covered in the course, but some of the graphical applications were new to me since I don’t do any graphics programming in my day job. I very much enjoyed the course, and I’m impressed with the instructors as well as with what can be achieved in a block-based programming language.

If you have children, and you want to introduce them to programming, I think that Snap! and Scratch are both excellent choices. They are most likely also great introductory tools for adults who want to get an initial idea of what programming is all about.

I highly recommend the course, which is available both in German and in English. I have only taken the German version of the course, so that is what this blog post is based on. You can sign up for any one of the courses free-of-charge. Happy coding!