2021 Wiley-IEEE Press Professional Book Award Recipient Boguslaw Cyganek

Professor Boguslaw Cyganek graduated in Electronics in 1993, then in Computer Science in 1996 from the AGH University of Science and Technology, Krakow, Poland. In 2001 he obtained his Ph.D. degree cum laude with a thesis on correlation of stereo images, then D.Sc. degree in 2011 with a thesis on methods and algorithms of object recognition in digital images. In 2017 Boguslaw Cyganek received a professorship from the President of the Republic of Poland.

Prof. Cyganek is with Department of Electronics, AGH University of Science and Technology, Krakow, Poland. During recent years he has been conducting research in computer vision and ML/AI systems, cooperating with many universities and scientific centers around the world, as well being a frequent speaker at international conferences. He also teaches several courses such as Computer Vision, Embedded Systems Programming, as well as Introduction to Programming and C++.  Boguslaw has also gained several years of practical experience working as a software developer in the USA, Germany, UK and Poland.

Prof. Cyganek published over 170 conference and journal papers, as well as several books including "An Introduction to 3D Computer Vision Techniques and Algorithms", Wiley 2009, "Object Detection and Recognition in Digital Images: Theory and Practice", Wiley 2013, with the recent "Introduction to Programming with C++ for Engineers", published in 2020 by Wiley-IEEE. He received many awards for scientific achievements, as well as an award for outstanding teaching accomplishments in the name of prof. W. Taklinski, Rector of AGH. Since 2012 Prof. Boguslaw Cyganek is a Senior Member of the IEEE.

Bogusław loves sports, but above all those related to water – for over 20 years he has been a SCUBA diving instructor.

What is your background?

From childhood I was fascinated with electronics, from electron tubes and analog circuits, then through the digital electronics, and – with the advent of personal computers – to software & programming. My first computer was Atari 800XL, which I learned to program in the 6502 assembly thanks to a Russian translation of Apple’s manual on Lisa programming. These life fascinations pushed me toward academia and then what resulted in two degrees, first in Electronics (1993), then in Computer Science (1996). Hence, my background, deep in electronics but inclined toward digital signal processing and in computer science.  This resulted in my profound interest in computer vision, which also led me to machine learning and, what we call today, artificial intelligence. My cooperation with industry has resulted in many successful projects and products, as well as greatly influenced my practical knowledge of system development and programming in the C++ language.

What are the most profound changes you have seen in your field across your career?

For the last quarter of the century there have been so many key technological breakthroughs that we barely comprehend their influence on society and the human condition, which are immense. These involve all three major branches: electronics, computer science and telecommunication, each influencing the others. The most important developments are certainly Internet, cellular communication, very large scale integrated circuits with multi-core microprocessors, but also new methods and algorithms such as the recent deep neural networks and the reinforcement learning that allowed machines to beat human chess and Go Masters. Not less amazing is to observe synergy among all these branches – for example Internet and mobile phones became possible thanks to new generations of microprocessors with nanometer technologies and gigahertz clocks. Development of integrated circuits coincides with development of modern programming paradigms, to some extent following the key concepts, such as component and object-oriented paradigms to programming, design patterns, agile methodologies and unified modeling approaches. Who knows what's going to happen soon?

What motivated you to write Introduction to Programming with C++ for Engineers?

I have a 25 years’ experience in programming and C++, as well as a 20 years’ experience in teaching this fascinating language. During this time I gained a lot of experience and gathered dozens of nontrivial examples. From observing beginners, I developed my own teaching methods that let me successively assist in acquiring practical knowledge in programming to hundreds of students of our faculty – the majority of them are working with great success in dozens of IT companies around the world. However, the C++ standard and the programming techniques are systematically evolving, so it is not easy to keep track, not mentioning preparing good and up-to-date teaching materials. Although, there are some remarkable books, as well as Internet sites, none of them fulfilled my needs when teaching. Therefore I spotted a gap and made a decision to share my experience and teaching methods – this is what motivated me to write Introduction to Programming with C++ for Engineers.

To all potential authors my advice is – you can write a book if you feel you have something to say, more precisely, to write. In other words you have to set up your ‘story’ before beginning, then start and continue up to the end, let the just arising book matter to guide you, and remember – up to the last dot your book is not finished. This is why I put a sentence attributed to Winston Churchill – “Success is not final, failure is not fatal; it is the courage to continue that counts…” Then writing a book is so much fun!

Who is the primary audience for Introduction to Programming with C++ for Engineers?

The book is aimed at teaching basics of programming using C++ mostly to the students of electrical and computer science engineering, as well as related fields. It is organized to be taught for at least three semesters but this can be flexibly arranged by the teachers. However, the book can be used by all beginning their journey into programming, such as high schools students, practitioners, but also programmers who already know C++ but want to recall and upgrade to the recent standards. It will be also of help to the trainers and teachers of programming and C++. How C++ will look in the future, and how reliable software will be, depends on how we teach learners today.

What are the key challenges this audience faces?

Conscious programming requires at least basic knowledge of computer architecture, operation of microprocessors, data structures and algorithms, as well as a programming language that lets us to talk to the machine. Surely, this can be C++, which is the most powerful computer language today. It has also a long history behind, great successes and vast heritage. However, all these make it complicated to comprehend, at least at the beginning.

The C++ language changed a lot and today it is a powerful tool but also completely different than it was ten or fifteen years ago. Therefore, we need to continuously learn and improve our skills. So, the book is also for persons who know, or knew, how to code with C++ but who lost track of the changes in the language that happened over the years.

How does your book solve this need/challenge?

Have you ever flown? If so, you probably remember that the first leg of your flight is a quick ascent. However, after few minutes the flight stabilizes and everybody becomes more relaxed. Starting with programming is similar – at the beginning everything is new and intimidating but after a short time, especially with a good companion at hand, everything stabilizes, you are more confident, can write simple programming constructs, and gradually go for and solve more complex tasks.

You have probably heard of the 80/20 Pareto rule, which says that 80% of the effects come from 20% of the causes. So, in the case of teaching programming with C++ the goal is to select these 20% of modern techniques that allow writing of 80% or more of beginning programs. This is the role of a good teacher, endowed with good teaching materials, to show this way to the students.

What unique features do you think make the book stand out in the market?

As already mentioned, with the 80/20 Pareto rule, the point is how to choose this “gold” 20% which I have done in this book. Based on over 20 years’ of experience in teaching C++, I’m presenting and discussing such topics as selecting the ABC’s and practical examples for teaching modern C++, how to avoid common pitfalls and bad habits, how to learn from mistakes, as well as how to progress toward professionalism.

The book is full of illustrations and diagrams, and probably this is the first one with so many tables that summarize the key concepts – they can be looked up when learning before the classes or during daily programming. As mentioned, there are also many examples, which help to understand the programming techniques, providing useful code snippets. All software is available free from the GitHub repository.

The graphic design full of color is no less important - it all makes the book more enjoyable and makes it easier to use.

What current projects are you working on?

I’m really lucky to work with my team composed of brilliant, highly enthusiastic and educated young colleagues. This makes my work twice as efficient and keeps my brain more active and creative. Not going into much detail, our recent projects involve development of embedded vision systems for counting passing by people and inferring their behavior, systems for drivers’ behavior analysis for safe driving, which is based on eye and yawn detection in thermal images, medical system for histopathological image analysis based on the newest deep neural architectures, apnea and hypopnea episodes detection in medical respiratory signals, underwater drone navigation based on underwater vision and sonar signals processing, a rescue system for detection of persons & objects drifting in the water, as well as image restoration and efficient signal filtering methods. More about all these can be found on my web page and in our publications.

What problems are you trying to solve?

Our problems are orbiting around the aforementioned projects and can be divided into two main groups: methodological and technological ones. The former embraces all aspects of developing new solutions for which an in-depth analysis and domain knowledge are necessary, such as new deep neural network architectures for precise cancer area detection in human tissues or efficient tensor decomposition methods for data compression and summarization, to name a few. The latter group involves comprehension and application of new physical devices, such as sonar cameras, as well as new programming paradigms and platforms, such as multi-core systems, in problem solving and assuring efficient real time operation if required.

Can you provide a brief summary of your book? 

Yes – the book have two facets: it is an introduction to computers & programming alongside with an introduction to modern C++; on the other hand it can serve as a refresher or a reference to programming with C++ on a daily basis.

The book is composed of nine sections. Section 2 constitutes a very basic introduction to programming with C++ while the main introduction to the basic methods and techniques is contained in Section 3. These two sections can be considered as material for the first semester in programming with C++.

More serious material commences in Section 4 that takes us on toward object-oriented and generic approaches to software design and programming. Section 5 provides a thorough introduction to the memory management issues, especially focusing on the smart pointers – the programming technology that changed the face of C++. Sections 4 and 5 can constitute the material for the second semester in programming.

In Section 6 the more advanced C++ programming techniques, such as the Unified Modeling Language, design patterns, code interpreters, filesystem, time measurement, etc., are profoundly discussed. This together with the remaining sections can fulfill the third semester of teaching.

The remaining sections discuss very important, although in some sense auxiliary aspects of the computer science. In Section 7 various topics of computer arithmetic and computations with fixed- and floating-point representations are presented and profoundly discussed. On the other hand, Section 8 presents basics of parallel programming. Finally, in Section 9 various related themes, such as the C++ preprocessor, introduction to C programming language – still important for example when dealing with legacy code or embedded systems – as well as graphical user interface platforms, or C++ programming toolchain, are presented.

All these in one colorful book of around 650 pages, accompanied with dozens of practical code examples.

Where can we find you online?

I have a web page at:

http://home.agh.edu.pl/~cyganek/

with a special site for the book

http://home.agh.edu.pl/~cyganek/BookCpp.htm

There you can find:

  • A link to the GitHub with all the code included in the book (https://github.com/BogCyg/BookCpp);
  • Links to my talks on the C++ conferences;
  • Additional lecture notes that extend the book;

You can reach me writing an e-mail cyganek@agh.edu.pl.

I’m also on the LinkedIn linkedin.com/in/bogusław-cyganek-a4065b1ba