Sharif Undergraduate Courses
List of my undergraduate major-related courses
This is a list of the major-related courses (labs, workshops, human sociology, theology, and general courses excluded) I took over my undergraduate studies at Sharif University of Technology.
Transcript: Please contact me if you wish to see an unofficial copy of my transcript or contact vpaa@sharif.edu or registrar@sharif.edu directly and ask for an official copy.
Table of Content:
Instructor: Dr. M.H. Mostafid
This course covers basic concepts of single variable calculus and geometry and provides the needed background for later technical courses.
Reference Books:
Instructor: Prof. M. Gholamzadeh Mahmoudi
Continuing from GEN MATH 1
, This course covers essential multi-variable calculus and geometric concepts and provides the needed background for later technical courses.
Reference Books:
Instructor: Prof. H.-R Fanai
In this course, first and second-level linear differential equations and some non-linear differential equations and systems of equations are introduced, along with some numerical and analytical ways to solve them.
Reference Books:
Instructor: Prof. H. Zarrabi-Zadeh
This course aims to acquaint students with the concepts, structures, and techniques of discrete mathematics that are widely used in computer science and engineering. Developing necessary skills such as understanding and constructing accurate mathematical proofs, creative thinking in problem-solving, familiarity with logic, combinations, number theory, graph theory, and computational theory, as well as providing the mathematical prerequisites needed for many other courses are the objectives of this course.
Reference Books:
Instructor: Prof. A. Sharifi-Zarchi
The purpose of this course is to acquaint students with the fundamental concepts of probability theory and statistical inference and their applications in computer engineering, such as data modeling problems and regression. These concepts include statistical interpretation and principles, univariate and multivariate probability distribution functions, conditional probability and statistical independence, random variables, defined functions on random variables, statistical distribution families, central limit theorem and law of large numbers, and hypothesis testing.
Reference Books:
A. Papoulis and S. Pillai. Probability, Random Variables and Stochastic Processes. 4th Edition, McGraw Hill, 2002, Chapters 1-8.
S. Ross. A First Course in Probability. 10th Edition, Prentice Hall, 2019.
G. Casella and R. L. Berger. Statistical Inference. 2nd Edition, Wadsworth Press, 2002.
Instructor: Prof. S. A. Motahari
This course aims to acquaint students with the necessary theoretical concepts of linear algebra and how to use and implement them in a suitable software context. Familiarity with this course's concepts allows the analysis of mappings and linear systems through matrices and operations, operators, and defined concepts related to them. The problem of optimization is also considered one of the most widely used applications of linear algebra.
Reference Books:
Instructor: Prof. M. Esfahani Zadeh
This courses is a compact introduction to Stochastic Processes aiming to familiarize students with fundamental concepts such as Markov Processes (Finite, Countable, Continuous-Time), Optimal Stopping, Martingales, Renewal Processes, Reversible Markov Chains, Brownian Motion, and more advanced ones such as Stochastic Integration and Itô Calculus.
Reference Books:
Instructor: Dr. F. Baharifard
The purpose of this course is to acquaint undergraduate students with numerical methods for solving scientific problems in various fields of science and engineering. These methods can approximate the scientific issues of different disciplines, which cannot be accurately calculated by conventional mathematical analogies, with a limited error. At the beginning of this course, students will be introduced to the concepts of error and the various numerical methods for solving technical engineering problems. On the other hand, using efficient software environments to solve problems, compare numerical methods, and graphically displaying the results to summarize them are the other objectives of this course.
Reference Books:
Instructor: Prof. A. Rezakhani
This course aims to familiarize students with the fundamentals of classical Newtonian physics, covering topics including Dynamics and Cinematics of mechanical systems.
Reference Books:
Instructor: Prof. A. Iraji Zad
This course continues on the topics covered in PHYSICS 1
and aims to familiarize students with the fundamentals of Electronics and Electromagnetism and very briefly introduce the concepts of modern physics.
Reference Books:
Instructor: Prof. S. Hesabi
This course covers topics such as: Design and implementation of combinational and sequential logic circuits, Concepts of Boolean algebra, Karnaugh maps, flip-flops, registers, and counters along with various logic families and comparison of their behavior and characteristics.
Reference Books:
Instructor: Prof. S. Koohi
This course covers topics such as fundamentals of electronic elements and circuits (i.e. Circuit analysis in time and frequency domains), diode circuits, circuit characteristics of bipolar and MOS transistors, MOS and CMOS digital circuits, and applicable circuits (e.g. Latches, Shift Registrs, RAMs, conversion circuits).
Reference Books:
Instructor: Prof. H. Asadi
This course introduces students to the foundations of hardware design and the interface of hardware to software implementations. Focusing on basic arithmatic digital circuits, this course motivates hardware inspired low-level assembly languages (specifically the MIPS Assembly language) and discusses topics such as ISAs, computational arithmatics, Addressing modes, Interpretation and runtime of programs, Memory organization, and I/O.
Reference Books:
Instructor: Dr. L. Arshadi
Continuing from COMPUTER STRUCT & LANG
, this course dives deeper in to the architectural design of computer hardware, covering topics such as: RTL, Datapaths, Control Paths, Advanced Computational Arithmetics and Numbers Reperesentation, Interupts and I/O, Pipelining, Caches, Parallelization.
Reference Books:
Instructor: Prof. F. Baharvand
This course intends to familiarize students with the practical design of digital systems and covers topics ranging from the pipeline of manufacturing digital circuit boards, verification tools and strategies, and extensively discusses Verilog and HDLs role in various parts of digital systems' world. Students will be able to design their own custom circuits for a wide range of applications using the Verilog HDL after going through the lectures and appointed practical and theoretical problem sets.
Reference Books:
Instructor: Prof. A. Hemmatyar
This course aims to develop an understanding of the various aspects of data communications and computer networking systems. Topics include: data transmission, channels and mediums, multiplexing, switching, protocols and architecture and more.
Reference Books: Is yet to be announced.
Instructor: Dr. M. Rivadeh
The purpose of this course is to familiarize students with the fundamentals of programming and the C language, to write effective code. Concepts like structured programming, software documentation, fundamental algorithms (i.e. sorting algorithms), basic software analysis tools, and pseudocodes are covered in this course.
Reference Books:
Instructor: Dr. M. Mostafazadeh
In this course, object-oriented programming concepts and basic software engineering concepts such as clean code and best practices are taught with Java programming language conventions in mind. Advanced programming concepts including Java's inherent features, concurrency and parallel programming, and software quality concepts are also discussed in this course.
Reference Books:
P. Deitel, H. Deitel. Java: How to Program. 11th Edition, Pearson Education, 2017.
B. Eckel. Thinking in Java. 4th Edition, Prentice Hall, 2006.
Instructor: B. Hatami
This course is a complete walkthrough of web technologies, fundamental network concepts and protocols, basic web security, and software engineering concepts and methodologies used in web application development. This course also offers a compact introduction to various front-end and backend programming tools and languages (Python,JS) and students are expected to study the state-of-the-art web development frameworks on their own to finish their course projects.
Instructor: A. Golzadeh-Kermani
This course studies the principles of programming languages with an emphasis on programming language implementation and compiler design. This includes various techniques for describing and defining a language, as well as techniques for implementing compilers. Course topics include: lexical analysis, syntactic analysis, recursive descent parsing, LR parsing, syntax-directed translation, type checking, code optimization.
Reference Books:
Instructor: Dr. S. Baghoolizadeh
The main objectives of this course are:
Reference Books:
Instructor: Prof. A. Heydarnoori
Building computer systems requires identifying their complexities and dimensions and designing appropriate strategies before they can be implemented. In this course, students are introduced to software analysis and design skills such as requirements analysis, feasibility analysis, process modeling and analysis, architectural design, and UI/UX design. In addition to these skills, this course covers computer systems production management and production planning skills such as agile methodologies, process automation, and project management concepts.
Reference Books:
L.D. Bentley, K.C. Dittman, and J.L. Whitten. Systems analysis and design methods. Irwin/McGraw Hill, 2007.
Instructor: Prof. R. Jalili
The purpose of this course is to acquaint undergraduate students with the principles of operating systems along with the fundamental concepts of linux kernel programming through an extensive set of assignments and course projects.
Reference Books:
Instructor: Prof. M. Jafari Siavoshani
This course aims to acquaint students with the basic concepts of computer networks and related ideas focusing on underlying network structures and protocols.
Reference Books:
Instructor: Dr. K. Mizanian
The purpose of this course is to acquaint students with the fundamental concepts of security, defense strategies, and attacks in the field of system, web, network, and data security.
Reference Books:
Instructor: Dr. M. Rivadeh
This course presents modern software engineering techniques and examines the software life-cycle, including software specification, design, implementation, testing and maintenance. The course gives an overview of methods and techniques used in agile software processes, contrasts agile approaches with traditional software development methods, and discuss the sweet spots of both classes of methodologies. Other non-agile commonly used approaches along with Process improvement initiatives such as the Capability Maturity Model (CMM) and Personal Software Process (PSP) will also be discussed in this course.
Reference Books:
Instructor: Dr. M. Safarnejad-Boroujeni
In this course, students are introduced to algorithm analysis methods, simple and advanced data structures, and some introductory algorithms. In this course the emphasis is on analyzing and proof of the correctness of algorithms. Student are expected to implement most of the discussed algorithms and data structures through an extensive list of assignments and the final course project to understand the syllabus thoroughly.
Reference Books:
Instructor: Prof. A. Sharifi-Zarchi
This course aims to acquaint students with standard methods in designing efficient algorithms for various problems. This course emphasises on analyzing the algorithms' efficiency and proving their correctness. Also, algorithm theory topics such as computational complexity, induction, network flow, linear programming, and graph algorithms are of the discussed topics in this course. A brief introduction of approximate algorithms is proposed as well.
Reference Books:
Instructor: Prof. S. Kasaei
This course provides an introduction to scientific & technical presentation. Topics include: Guidelines on good technical presentations (written and oral), elimination of sporadic noise in technical presentations, writing technical documents with emphasis on content and style, accessing technical information, engineering a presentation, and writing other common technical documents.
Reference Books:
Computer Engineering Internship is an obligatory course during which students can adapt their learning to practical and executive procedures used in the country's industrial environments by spending +240 hours in approved industrial centers. Additionally, during the internship, students can plan to address potential weaknesses while recognizing their abilities and assessing their readiness to participate in industrial environments.
The purpose of an undergraduate project is to analyze, design, and implement an actual project or to carry out a research project based on what has been learned during the undergraduate course and curate and defend the undergraduate thesis.
Instructor: Dr. S. Dolatnezhad
In this course, students will be introduced to the concepts of semantic data modeling and database design. At the end of the semester, it is expected that students will be fully acquainted with the database design ideas, including principles of database design, semantic data modeling using ER and ERR methods, relational database design, SQL and NoSQL DBMS, and other core concepts.
Reference Books:
R. Elmasri, S. Navathe. Fundamentals of Database Systems. 7th Edition, Pearson, 2015.
C. J. Date. An Introduction to Database Systems 8th Edition, Pearson, 2003.
Instructor: Prof. M.T. Manzuri Shalmani
The purpose of this course is to acquaint students with modeling, description, and analysis of signals and systems in time and frequency domains from both theoretical and practical perspectives. Python exercises are appointed in addition to theoretical exercises for practical mastery of the concepts discussed in this course.
Reference Books:
Instructor: Prof. A. Hemmatyar
The purpose of this course is to acquaint students with various discrete and continuous event simulation methods and related topics.
Reference Books:
Instructor: Prof. M.H. Rohban
This course proposes the theoretical and practical aspects of artificial intelligence. With the aim to introduce techniques for making optimal or near-optimal decisions in various issues and environments, this course looks at concepts such as search, problem-solving, inference in uncertain environments, Bayesian networks and probabilistic reasoning, Markov decision processes, machine learning, deep learning and reinforcement learning.
Reference Books:
Instructor: Prof. H. Beigy
This course introduces information retrieval systems. First, Boolean indexing operations and data retrieval models are discussed. After presenting the TF-IDF vector space model and techniques for speeding up document scoring and sorting, probabilistic information retrieval models are introduced, and the concepts of document classification and clustering are discussed. Next, web search engines are introduced, and essential components such as document graph analysis crawler and similar document recognition are examined. Finally, reference systems and advanced information retrieval concepts are briefly discussed.
Reference Books:
Instructor: Prof. S. Kasaei
This course provides an insight to image processing theory and techniques. Topics include: 2D signals & systems, 2D random processing, image perception & formation, color image processing, image sampling & quantization, image transforms, image enhancement, image filtering & restoration (Wiener filtering), image analysis (edge detection, region representation, scene matching, image segmentaion, image classification, morphological filtering, Hough transform), image data compression (predictive, Huffman, arithmetic coding), deep learning for image processing applications, and wavelets.
Reference Books: