This course aims to introduce students to the essential concepts of computing, programming, and problem-solving, equipping them with the basic programming skills crucial for engineering education.
Course Objective:
Prerequisites:
Course Contents:
This module introduces the fundamental concepts of problem-solving and programming. Students will learn about the basic structure of a computer program, including variables, control structures, and data types. Through hands-on exercises, students will practice writing simple programs and solving computational problems. The module also covers the importance of algorithm design and the role of pseudocode in planning a program. By the end of this module, students should be comfortable with writing basic code and understanding the logic behind simple programming tasks.
This module explores advanced problem-solving techniques using programming. Students will delve deeper into algorithm design, focusing on iteration versus recursion. They will practice writing both iterative and recursive algorithms and learn when to apply each approach. The module also addresses functional programming styles, emphasizing clarity and efficiency in code. Students will work on debugging strategies to ensure code correctness, learning how to identify and fix errors in their programs.
This module focuses on the imperative style of programming, a key approach in computer science. Students will learn about assertions and loop invariants, and how they contribute to program correctness. The module covers the use of procedures and functions to build modular code, and how to manage data with lists and references. Through practical exercises, students will enhance their skills in handling complex data structures and organizing code effectively.
This module introduces students to file handling in programming, an essential skill for managing data. Students will learn how to read from and write to files, manipulate file contents, and handle different file formats. The module also covers error handling in file operations, ensuring that programs can manage unexpected scenarios gracefully. By the end of this module, students will be equipped to incorporate file handling into their projects, enhancing their data management capabilities.
This module delves into object-oriented programming (OOP), a paradigm that uses objects and classes to structure code. Students will learn the principles of OOP, including inheritance, encapsulation, and polymorphism. They will practice creating classes and objects, and explore how these concepts improve code organization and reusability. Through hands-on exercises, students will develop programs using OOP techniques, gaining skills that are fundamental in modern software development.
This module emphasizes the importance of program efficiency, focusing on time and space complexity. Students will learn how to evaluate the performance of algorithms, understanding how code execution time and memory usage affect program efficiency. The module introduces big-O notation as a tool for analyzing algorithm complexity. Through comparative studies of various algorithms, students will gain insights into selecting the most efficient solutions for different problem types.
This module covers the use of advanced programming features, such as lists and references, to handle complex data structures. Students will explore different techniques for manipulating lists, including sorting and searching algorithms. The module also addresses the use of references to manage memory efficiently and avoid common pitfalls, such as memory leaks. Through practical examples, students will learn how to implement and optimize data structures in their programs.
This module introduces students to the concept of software testing and validation. Students will learn about different testing strategies, including unit testing, integration testing, and system testing. The module emphasizes the importance of writing test cases to verify the correctness of code and ensure that programs meet specified requirements. Through practical exercises, students will gain hands-on experience in applying testing methodologies to improve software reliability and quality.
This module focuses on the integration of programming with engineering applications. Students will learn how to apply programming skills to solve real-world engineering problems, using case studies and project-based learning. The module covers topics such as simulation, automation, and data analysis, demonstrating the role of programming in modern engineering practices. By the end of the module, students will be able to develop solutions that leverage programming to enhance engineering processes.
This module introduces students to the ethical considerations in programming and computing. Students will learn about the impact of technology on society, exploring topics such as privacy, security, and intellectual property. The module emphasizes the importance of ethical decision-making in software development and the responsibilities of programmers in safeguarding user data. Through discussions and case studies, students will reflect on the ethical challenges faced in the tech industry.
This module covers the basics of network programming, an essential aspect of modern computing. Students will learn about networking concepts, including protocols, sockets, and data transmission. The module provides practical experience in developing networked applications, enabling students to send and receive data over the internet. By the end of this module, students will have a foundational understanding of how computers communicate and the skills to build simple networked programs.
This module introduces students to database management and its role in programming. Students will learn about database design, normalization, and SQL (Structured Query Language) for querying data. The module covers the concepts of relational databases and data integrity, demonstrating how to store, retrieve, and manipulate data efficiently. By the end of the module, students will be able to design simple databases and perform basic operations using SQL.
This module explores the concepts of software development life cycle (SDLC) and project management. Students will learn about different stages of SDLC, including planning, analysis, design, implementation, testing, and maintenance. The module covers project management techniques to ensure successful software delivery, emphasizing the importance of teamwork, communication, and documentation. Through case studies and exercises, students will gain insights into managing software projects effectively.
This module focuses on the use of programming for data visualization and analysis. Students will learn how to use programming languages and libraries to create visual representations of data, making it easier to identify trends and patterns. The module covers techniques for handling large datasets and using visualization tools to communicate insights effectively. By the end of this module, students will be able to develop interactive visualizations to support data-driven decision-making.
This module introduces the concept of artificial intelligence (AI) and machine learning (ML) in programming. Students will learn about the basics of AI and how machine learning algorithms can be used to solve complex problems. The module covers different types of learning, such as supervised and unsupervised learning, and the role of data in training models. Through practical examples, students will explore how to implement simple machine learning models and understand their applications.
This module covers the principles of cybersecurity and its importance in programming. Students will learn about common security threats and vulnerabilities, and how to protect software systems from attacks. The module introduces techniques for secure coding practices, encryption, and authentication. Through case studies and simulations, students will gain insights into real-world security challenges and the strategies used to mitigate them.
This module delves into the concept of cloud computing and its applications in programming. Students will learn about cloud services, including Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS). The module covers the benefits of cloud computing, such as scalability and cost-efficiency, and how to deploy applications on cloud platforms. By the end of this module, students will understand how to leverage cloud technologies to enhance software development and deployment.
This module introduces students to the concept of mobile application development. Students will learn about the differences between mobile and desktop applications, exploring the unique challenges of mobile development. The module covers the basics of designing and building mobile apps, including user interface design and optimizing for performance. Through project-based learning, students will gain experience in creating simple mobile applications for different platforms.
This module explores the use of programming in the Internet of Things (IoT), a rapidly growing field in technology. Students will learn about IoT devices and how they communicate with each other and the internet. The module covers the basics of developing IoT applications, including data collection and analysis from connected devices. Through practical exercises, students will gain hands-on experience in creating simple IoT applications, understanding their potential impact on various industries.
This module covers the importance of programming in scientific computing. Students will learn how to use programming languages to perform scientific calculations and simulations. The module introduces numerical methods and techniques for solving mathematical problems using computers. Through hands-on projects, students will apply these methods to real-world scientific problems, gaining skills in developing software solutions that support scientific research and innovation.
This module serves as an introduction to the core concepts of problem-solving and programming. Students will learn about:
By the end of this module, students will have developed a foundational understanding of how to approach programming challenges effectively.
This module delves deeper into algorithmic thinking and the various styles of programming necessary for effective problem-solving. Key topics include:
Students will engage in practical exercises that reinforce these concepts, enhancing their programming proficiency.
This module focuses on practical programming skills in an imperative language. Students will learn:
Through hands-on projects, students will apply these concepts to real-world programming scenarios.
This module reinforces the programming concepts learned previously, emphasizing problem-solving through practical applications. Key features include:
Students will leave this module with a robust toolkit for tackling programming challenges in their future studies.