Completed Courses

Here I will describe the technical courses I have completed and the material I learned from each course. For more information on projects completed for each of these courses, check out my projects page for detailed descriptions.

  • Design, usage and analysis of data structures: review of lists, stacks and queues
  • Hash tables, priority queues, search trees, introduction to graphs
  • Searching and sorting
  • Runtime analysis
  • Programming projects and lab exercises based on the topics listed
  • Programming language paradigms, design and implementation: syntax and semantics
  • Parsing
  • Runtime systems
  • Data types, data and procedural abstraction
  • Function programming
  • Software design principles and practices: Object-oriented design
  • Design patterns
  • Software reuse
  • Unit testing
  • Event driven programming and concurrency
  • Graphical user interface design and development
  • Team development
  • Study of computer systems emphasizing impact on application level programming
  • Virtual memory and memory management
  • Code optimization
  • System-level I/O
  • Concurrency and threads
  • Synchronization
  • Introduction to network programming
  • Computer hardware building blocks.
  • Logical gates, combinational circuits, arithmetic circuits
  • Flip flops and sequential circuits
  • Registers and memory, CPU Design, I/O Design
  • Design and analysis of computer algorithms.
  • Divide-and-conquer, dynamic programming, greedy method, backtracking.
  • Algorithms for sorting, searching, graph computations, pattern matching, NP-complete problems.
  • Software life-cycle model.
  • Requirement specification techniques.
  • Large-scale software design techniques and tools.
  • Implementation issues.
  • Testing and debugging information.
  • Software maintenance.
  • The Open Systems Interconnect model.
  • Data link.
  • Network and transport layers.
  • TCP/IP, ATM, and mobile networks.
  • Data abstraction, classes and objects, messages and methods, polymorphism and dynamic binding, inheritance.
  • Object-oriented design.
  • Pure and hybrid object-oriented languages.
  • Design and implementation of mobile applications.
  • Integration with hardware components and location-aware applications.
  • Operating systems, object-oriented languages and programming environments for mobile platforms.
  • Database design, logical design, physical design.
  • Relational databases.
  • Recovery, concurrency control and normalization.
  • Mechanism, implementation, and application of systems that improve automatically based on past experience, including classification, density estimation, clustering, and online learning tasks and solutions.