# 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)