Teaching

I have been teaching the following software development and architecture courses below. Prerequisites of every course are listed along with the books I suggest as supplementar materials. I prefer to teach by hands-on coding myself while discussing the pros and cons of every design decision with the participants. All courses I teach have a balance of 70% practice and 30% theory.

CSE112 - Object Oriented Programming (2018)

Prerequisites: Programming Java Basics
(From the course's original syllabus.)
The objective of this course is to introduce the concepts of object oriented thinking, design, and programming on Java language platform. Upon successful completion of the course, the students will be able to:
  • Explain the object oriented approach in programming
  • Use an object oriented programming language Java, and associated class libraries, to write and test programs
  • Develop UML based designs using the concepts of data encapsulation, inheritance, and polymorphism to solve real world problems
  • Implement UML based designs (based on class diagrams) for problems displaying some architectural complexity, and considerable inter-class communications
  • Use IDE(s) to design, implement, debug and execute object-oriented applications.
  • Işık University - Computer Engineering - Summer 2018 students, click here to download course's syllabus.

Test Driven Development & Unit Testing Patterns (2014 - ...)

Prerequisites: Object Oriented Programming & Design Patterns
Delivering high-quality production code requires well-organized unit tests in enough coverage. However, paradoxically, proper unit testing requires well-designed software that can handle dependencies of inner components flawlessly. TDD methodology addresses the problem by offering development teams to follow a straightforward process called red-green-refactor. If only teams can clearly define requirements of the problem domain along with the isolated test cases right before implementing the software itself, it could resolve many potential bugs and design flaws without even introducing them into the software in the first place. This course focuses on patterns, practices, and processes for developing high-quality software with its unit tests while making in-depth analyses of mocking/stubbing, dependency injection, and testing tools. –Gökhan

"If debugging is the process of removing software bugs, then programming must be the process of putting them in."

Edsger Dijkstra
    Course Outline:
  • Introduction to Testing
  • Types of Testing
  • Unit Testing vs. Integration Testing
  • Unit Testing Tools
  • TDD Methodology, Red-Green-Refactor Cycle, Being Agile
  • TDD and Refactoring
  • OOP Quick Review
  • Breaking Dependencies with Dependency Injection (DI)
  • Test Doubles (Mocks, Stubs) - Isolation Frameworks
  • Value-based vs. State-based vs. Interaction Testing
  • Testable Software Design and Architecture
  • Avoiding Anti-patterns: Statics, Singletons, etc.
  • Test Code Organization and Quality
  • Code Coverage
  • Behavioral Driven Design (BDD)
  • Continious Integration (CI) and Continious Delivery (CD)

Course designed by Gökhan Ercan.

Enterprise Design Patterns & Architectures (2013 - ...)

Prerequisites: Object Oriented Programming & Design Patterns
This course is designed to help teams on developing enterprise software development frameworks to support multiple applications and components within the organization. Enterprise developers should quickly satisfy high-quality non-functional requirements while dealing with highly complex problem domains, services, and user interfaces. Enterprise-level design patterns and practices cover developing reusable, maintainable, and extensible components/layers such as data access, ORM, service communication, DI containers, configuration management, logging, exception handling, caching, security, user interfaces an so on. This course employs a data-centric approach to enterprise development where the most topics based-on Martin Fowler's famous "Patterns of Enterprise Application Architecture" (EAPP) book. Throughout the course, even most complex foundational layers will be developed from the scratch such as Data Mapping, Dynamic Proxy, Unit of Work, and MVP.
    Course Outline
  • Domain Modeling: Anemic Model, POCO, Domain Model, DDD, CRUD Entity Model etc.
  • Crosscutting Concerns: Logging, Caching, Configuration, Authentication, Authorizarion, Security etc.
  • Developing Enterprise Framework: Coupling, Versioning, DSLs, Metadata Management, Principles of Packaging etc.
  • Service Layer: Transaction Script Model, Web Services, Facade, REST API, Transactions, Repository, DTO etc.
  • User Interface Layer: Screen Generation, Multi-lingual, Ambient Context, MVC, MVP, MVVM etc.
  • Unit Testing: Testable Business Layer, Tools, Managing Dependencies, Stubbing/Mocking, BDD, Anti-patterns etc.

Object Oriented Programming & Design Patterns (2012 - ...)

Prerequisites: Programming Data Structures
This course covers the advanced object-oriented programming techniques and design patterns which are one of the most important foundations behind reusable and extensible library design. In a modern development world, every team should agree on the fundamentals of the object-oriented theory regardless of the platforms they use. Course iterates through every GOF design patterns right after making an in-depth analysis of popular SOLID principles. –Gökhan



    Course Outline
  • Object-oriented Review
  • SOLID Principles: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
  • Design Patterns: All 23 GOF design patterns by real-world examples.

Advanced ASP.NET Development (2010 - 2012)

Prerequisites: Programming Web Development
The course covers advanced methods for developing enterprise-level web applications and reusable web components. Instead of explaining the usage of existing components and structures of the ASP.NET system, it aims at dissecting underlying structures of ASP.NET system such as application lifecycle, page lifecycle, web control hierarchy, HTTP modules/handlers etc, in order to give participants courage to develop their own reusable components from scratch or extending existing ones. Furthermore, it searches for solutions on enterprise level non-functional requirements such as security, caching, configuration management and performance monitoring. –Gökhan

    Course Outline
  • Application Lifecycle: AppDomains, HttpContext, HttpModules, HttpHandlers, Config inheritance, Request validation, IIS Modes etc.
  • Page Lifecycle: Postback, Viewstate, UrlRewriting, WebForm Events, Databinding etc.
  • Web Controls: Dynamic controls, Custom controls, TemplateField, Business controls, Attributes, Viewstate encryption etc.
  • Localization/Globalization: Culture, UICulture, Culture events, Ambient context, Global resources etc.
  • Session Management: State servers, Webfarms, Session events, Custom session module, Monitoring etc.
  • Caching: Output Caching, Data caching, Cache depedency, Substitution, Custom caching, Async page etc.
  • Web Application Security:URL hashing, OWASP list, Sql injection, XSS attacks, Session hijacking etc.

Developing .NET Applications with C# (2010 - 2012)

Course covers basic concepts required for developing web applications with .NET Framework, ASP.NET and MSSQL Server technologies. Some of the main components of the course are:
  • Object Oriented Programming Basics: static vs. instance, constructors, interfaces, inheritance, events, overriding, overloading etc.
  • .NET Basics: ref types, value types, arrays, collections, indexers, attributes, convertions, boxing, generics, linq, etc.
  • SQL Server: Relational database design, ADO.NET objects, stored procedures, indexes, queries, views, reporting etc,
  • ASP.NET: state management, web controls, data binding, postback, caching, http handlers, http modules, ajax, javascript etc.