Programming 2: Introduction to Programming, Linux and C

IMPORTANT NOTE: This is a very rough preliminary draft of what we are working on at the moment.  All content here is subject to change as we finish integrating the printed book material and course lab exercises into the course design.   We expect for this to be complete by the end of July 2021.
Status: Course design 80% complete.


Engineer 1This first course in structured programming is broken down into two sections: Linux and an introduction to C language programming.  Students should have basic knowledge and background in at least one block programming language. An introduction to programming, the history of programming languages and an overview of how and why different languages exist is presented. The rest of the course is broken down into two main areas: Linux and C programming.  At the end of this course students will have a working knowledge of how to use Linux and be able to design, code and test simple programs in the C language.

Computer programs need environments to build and run in. These exist for all modern operating systems including Windows, MacOS, Linux and others. Teachers Network ECE courses and instruction are based on Linux and Raspberry Pi hardware (the Pi 4 at the time of this writing). These and other SOC based computers are very affordable and offer good performance for many tasks, including software development. The Linux Operating system and all software tools we use in our courses are free and open source. For about USD 100 (not including monitors and keyboards) we can now build an educational environment covering the needs of all the Teachers Network ECE courses (including the hardware classes). This way we hope to be able to put very capable and affordable computing tools directly into the hands of our students.

Linux GlancesThe first part of this course covers the installation and basic operation of the Linux Operating system. Mastery of Linux is essential not only this class but all followup Teachers Network courses. All program development, regardless of language or intended end use, will be done with Linux.Use of the system as a normal user, theory of operation (modular design), command line usage, basic text editor usage and how to connect different commands together are covered. The Linux file system, permissions, simple shell scripting and basic programming tools are also covered.

Since the late 1970’s the C programming language has been one of the most popular and influential languages in the world. It is a low level structured programming language and one of the best languages for daily program development and for learning basic programming. Most higher level object oriented languages such as C++, Python, Java and others have their roots with C. Concepts learned with C are easily applied to these other languages.

Learning Outcome

After completing this class the student should:

  • have a working knowledge of how and why we use programming languages.
  • have a working knowledge of how to use the Linux operating system.
  • use different data types in a computer program
  • design programs involving decision structures, loops, arrays and functions
  • use pointers and understand memory allocation and de-allocation
  • create and perform different file I/O operations

Course Start Date

Fall Session 2021 (tenative)

Textbooks

Prog 2 BooksThe books to be used in this course are still under evaluation.   Those that have been or are currently being evaluated are listed below together with our comments regarding suitability.

Linux Textbooks

The Linux Command Line – A Complete Introduction by William E. Shotts, Jr. This is an excellent book covering the essentials of Linux and command line usage. It is well written and easy to follow. Highly recommended for students serious about further computer study.

Unix in 24 Hours, Sames Teach Yourself, 5th Edition by Dave Taylor – An excellent book by a very well respected author. The title is a little misleading though as nobody will get through the almost 1,700 pages in 24 hours! A great reference book.

Linux Bible, 9th Edition by Christopher Negus. Very good reference and companion book to others presented here.

Linux The Complete Reference, Sixth Edition by Richard Petersen. This book covers everything from new users through experienced system administrators. Overkill for this course but it does make a good reference book.

Mastering Linux by Paul S. Wang. This is another great reference book. It has a few introduction chapters with tutorials at the beginning that might make for useful class handouts. What’s not to like about books from CRC Press?

Learning the Vi and Vim Editors, 7th Edtion by Arnold Robbins, Elbert Hannah and Linda Lamb. This is a very good reference book for students who want to learn more in depth information about the vi editor. It’s part of the O’Reilly book series and presents very well. A good addition to any reference bookshelf.

C Programming Language Textbooks

The C Programming Language, Second Edition by Brian W. Kernighan and Dennis M. Ritchie. This is generally considered the C language bible in the industry, but it is a bit dated now. Even so it presents a very concise and easy to read description of the language. Does not cover some of the more recent changes to the language. Good reference book.

C Primer Plus, 6th Edition by Stephen Prata. This is an excellent book on the subject but very long and verbose. Probably not the best choice for a textbook for this class because of this but it makes a very good reference book. Published by Addison-Wesley, 2014.

Learn to Program with C by Noel Kalicharan and published by Apress, 2015. This is a very good book and probably the best choice for a textbook for this class. 323 pages with exercises but will need to enhance the exercises for this class.

Beginning C, 5th Edition by Ivor Horton. Published by Apress 2013, 675 pages. Excellent textbook at a medium length. Extremely good reference book.

Required Class Supplies

Except for the first two Scratch courses, all ECE courses standardize on the use of Linux and open source software. Student provided computers can work but it is the responsibility of the student to download, install, and configure Linux and the necessary applications. A separate white paper will be written to describe how to do this. Any modern (within the last 8 years or so) x86 (Intel or AMD) based system should work fine.

Teachers Network can provide complete Raspberry Pi 4 based desktop solutions with all necessary software preinstalled. These relatively inexpensive computers (less than $150 USD) are suitable for use in this course as well as all other Teachers Network ECE courses. Information about the packaged solution to be provided separately.

Additional Resources

Programming 2: Introduction to Programming, Linux and C Course Outline – full course syllabus