# Software Engineering Road
A complete computer science self-study plan
| Subject | Description | Duration | Requirements |
| -------- | -------- | -------- | ----- |
| [Computer & Programming](#Computer-amp-Programming) | Basic intro to computing and programming | N/A | Intro to CS |
| [Advanced Programming](#Advanced-Programming) | Understadning OOP | N/A | Computer & Programming |
| [Data Structures & Algorithms](#Data-Structures-amp-Algorithims) |Popular algorithms & Data Structures | N/A | Programming & Advanced Programming |
| [Database Systems](#Databases-Systems) | Understrand the concepts of a DBS | N/A | Data Structures|
| [Softwre Engineering](#Software-Engineering) | Learn about the process of building software | N/A | Data Structures |
| [Computer Organization & Assembly Language](#Computer-Organization-amp-Assembly-Language) | Dealing with lower level computer programming | N/A | Programming & Intro To CS
| [Operating Systems](#Operating-Systems) | Fundamental concepts of the an operating system | N/A | Data Structures
| [Compilers And Programming Languages](#Compilers-And-Programming-Languages) |Compilers: Principles, Techniques and Tools | N/A | Math*
| [Computer Networks](#Computer-Networks) |Focusing on the Internet and the fundamentally important issues of networking | N/A | Computer Organization & Assembly Language
| [Computer Security](#Computer-Security) |the systems, technology, management, and policy side of security | N/A | Linux & Data Structures
### Computer & Programming
Basic intro to computing and programming:
**Topics To Cover**:
- Programming in one of high level language basically (C)
- Basic structures of programming tools:
- Language elements (variable names and data types)
- Control statements
- Functions
- Arrays
- Pointers
- Strings
- Memory management
- File processing
- Structure definition and applications
**Course Books**:
- C In Five Days (Recommended)
- [How to Program by Deitel and Deitel](https://www.amazon.com/Java-Program-Early-Objects-Deitel/dp/0134743350/ref=dp_ob_title_bk)
- [C Programming Language](https://www.amazon.com/gp/product/0131103628/ref=as_li_tf_tl?ie=UTF8&tag=disfordig-20&linkCode=as2&camp=217145&creative=399369&creativeASIN=0131103628)
- [Practical Programming: An Introduction to Computer Science](https://www.amazon.com/Practical-Programming-Introduction-Computer-Science-ebook-dp-B07999NSLW/dp/B07999NSLW/ref=mt_kindle?_encoding=UTF8&me=&qid=)
**Video Lectures**
- [CS50](https://cs50.harvard.edu/x/2020/)
- [Ultimate Java Part 1: Fundamentals
](https://codewithmosh.com/p/ultimate-java-part-1)
### Advanced Programming
The study of object oriented programming in Java and functional & non-functional programming.
**Topics To Cover**:
- Object Oriented Analysis
- Design, Programming, and Applications.
- Object oriented programming
- Analyze, and design programs using one of the
- Object Oriented languages
- Structure of the language (classes & interface)
- language syntax and features, input/output
- events handlers and applications
**Course Book**:
- [How to Program by Deitel and Deitel](https://www.amazon.com/Java-Program-Early-Objects-Deitel/dp/0134743350/ref=dp_ob_title_bk)
**Video Lectures**:
- [Object Oriented Programming in Java](https://www.coursera.org/learn/object-oriented-java)
- [Ultimate Java Part 2: Object-oriented Programming](https://codewithmosh.com/p/ultimate-java-part-2)
### Operating Systems
The understanding of an operating system parts and how its built.
**Topics To Cover**:
- Processes and Process Management
- Threads and Concurrency
- Scheduling
- Memory Management
- Inter-Process Communication
- I/O Management
- Virtualization
- Distributed File Systems
- Distributed Shared Memory
- Cloud Computing
**Course Book**:
- [Operating System Concepts](https://www.amazon.com/dp/1118063333/)
**Video Lectures**:
- [A playlist from YouTube](https://www.youtube.com/playlist?list=PLBlnK6fEyqRiVhbXDGLXDk_OQAeuVcp2O)
### Computer Organization & Assembly Language
Programming in a low level language and get a better understanding of how computers work.
**Topics To Cover**:
- Operations of the computer at the machine language level.
- Basic computer operations, organization
- Deals primarily with the MIX computer system.
- Assembly language programming techniques,
- defining appropriate data structures
- determining the information for input or output
- the flow of control within the program.
- Basic I/O programming concepts
- Technique of interrupts and an overlapped I/O.
**Course Book**:
- [Computer Organization and Assembly Language Programming](https://www.sciencedirect.com/book/9780125522502/computer-organization-and-assembly-language-programming#:~:text=Computer%20Organization%20and%20Assembly%20Language%20Programming%20deals%20with%20lower%20level,in%20the%20typical%20computer%20system.&text=An%20assembler%20can%20translate%20a,the%20computer's%20memory%20for%20execution.)
**Video Lectures**:
- [Assembly Language Programming Tutorial](https://www.youtube.com/watch?v=zEuvNYe7WG0)
### Databases Systems
The basic concepts of a database system and how to design databases.
**Topics To Cover**:
- Overview of database system
- Introduction to database design
- Relational model
- Relational algebra
- Query language
- Normalization
- Connectivity with a programming language
- Overview of storage and indexing
- Query evaluation and optimization
- Transactions
**Course Book**:
- [Fundamentals of Database Systems](https://www.amazon.com/Fundamentals-Database-Systems-Ramez-Elmasri/dp/0133970779)
**Video Lectures**:
- [Database Systems Concepts & Design
by](https://www.udacity.com/course/database-systems-concepts-design--ud150)
### Data Structures & Algorithims
Understand popular algorithms and data structures that are commonly used in programs.
**Topics To Cover**:
- Data type and structures
- Abstract data types and encapsulation
- Recursion
- Proof of correctness of algorithms.
- Complexity of algorithms (BigO)
- Linked Lists
- Stacks
- Queues
- trees
- Binary trees
- heap
- Hashing
- Sorting and Searching
- Graphs
- Traversing, shortest path
- File organization.
**Course Books**:
- [The Algorithm Design Manual](https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/?pldnSite=1) (Prefered)
- [Introductions to Algorithms](https://www.amazon.com/Introduction-Algorithms-Edition-Thomas-Cormen/dp/0262033844?tag=javamysqlanta-20)
- [Data Structures and Algorithms: Deep Dive Using Java](https://www.udemy.com/course/data-structures-and-algorithms-deep-dive-using-java/?LSNPUBID=JVFxdTr9V80&ranEAID=JVFxdTr9V80&ranMID=39197&ranSiteID=JVFxdTr9V80-Tv6libFgNbePU6hCZteMBQ)
**Video Lectures**:
- [Algorithms and Data Structures
From Edx](https://www.edx.org/course/algorithms-and-data-structures)
- [JavaScript Algorithms and Data Structures Masterclass](https://www.udemy.com/course/js-algorithms-and-data-structures-masterclass/)
### Computer Networks:
**Topics To Cover**:
- Data communication networks and open system standards
- Layered network architecture
- Local area networks (LANs)
- High-speed and Bridge LANs
- Wide area networks (WANs)
- Internetworking
- Transport protocols
- Error detection and correction
- ARQ strategies
- Framing
- Identification and addressing
- M/M/1 queuing system
- Multiple access communication
- Routing and flow control.
**Course Book**:
- [Computer Networking: A Top-Down Approach](https://www.amazon.com/Computer-Networking-Top-Down-Approach-7th/dp/0133594149/?pldnSite=1)
**Video Lectures**:
- [Computer Networking Complete Course by Google - Beginner to Advanced](https://www.youtube.com/watch?v=QKfk7YFILws)
- [Introduction to Computer Networks for Non-Techies](https://www.udemy.com/course/introduction-to-computer-networks/)
### Computer Security
Understand online security and protection & Understanding themathematical and computational foundations of security
**Topics To Cover**:
- Introduction to computer security
- Authentication security policies
- Models
- Mechanisms of security
- Basic cryptograph techniques
- Control and prevention of viruses
- Intrusion prevention
- Detection
- Correction
- Legal social issues
**Course Book**:
- [Introduction for Computer Security](https://www.amazon.com/Introduction-Computer-Security-Michael-Goodrich/dp/0321512944)
**Video Lectures**:
- [Introduction to Cyber Security
](https://www.futurelearn.com/courses/introduction-to-cyber-security)
### Software Engineering
Process, Modeling, Quality Management, Managing Software Projects, and Advanced Topics.
**Topics To Cover**:
- Software Characteristics
- Introduction to modeling
- Abstraction and conceptualization
- Software Process Models
- Waterfall model
- Iterative models and evolution models
- Increment models
- Agile software development
- Software Development life cycle phase's
- Requirements engineering
- Software design
- Software construction
- Software validation
- Software evolution
- Scenario-based approach for requirements gathering use cases UML
- Use case diagram
- Object Oriented analysis
- Class diagram
- Sequence diagram
- State chart diagram
- Activity diagram and collaboration diagram.
- Functional requirements and non-functional requirements.
- Software Requirement Specification Document
- Requirements management andvalidation.
- Determine design goals
- System Design
- Object oriented design
- Design Pattern
- Software architecture
**Course Book**:
- [Software Engineering: A Practitioner's Approach](https://www.amazon.com/Software-Engineering-Practitioners-Roger-Pressman/dp/0078022126)
### Compilers And Programming Languages
**Topics To Cover**:
- Introduction to programming languages
- Programming languages features
- Paradigms
- Data types
- Control structures
- Data flow
- Runtime behavior
- Programming languages syntax
- Grammars and ambiguous grammars
- Lexical analysis
- Finite state automata
- Parsing techniques
- Construction of efficient parses
- Error detection and recovery.
- Syntax -directed translation and code generation.
**Course Book**:
- [Compilers: Principles, Techniques, and Tools](https://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811)
**Video Lectures**:
- [Compilers: Theory and Practice](https://www.udacity.com/course/compilers-theory-and-practice--ud168)