└── README.md /README.md: -------------------------------------------------------------------------------- 1 | ## Roadmap to become a professional Software Engineer 2 | 3 | First of all, I am starting it off by saying **what is computer programming?** 4 | It is the ability to take any idea that you have and to digitize it and bring it into the world whether it is you want to make practical applications, get clients, get a job, work as an independent contractor or you want to make cool games. Either case programming is for you. 5 | 6 | **Why should you learn to code?** 7 | There are a million reasons to answer this question, but I will talk about **the best ones**, 8 | 9 | 1. **The flexibility of work** (you can work from anywhere you want(freelance))(resources: [Freelancer](https://www.freelancer.com/?t=b&utm_expid=294858-533.sSCN-RzLRZK-gGrc0_aFaw.1&utm_referrer=https%3A%2F%2Fwww.google.com.eg%2F), [UpWork](https://www.upwork.com/)) so, working remotely is a great benefit that you can have so you don’t have to be at a nine to five job. 10 | 2. **Job security:** software development is the number one growth industry in the world so there is no job scarcity happening here. 11 | *** 12 | **What is it?** 13 | This is my own perspective plan to be a professional software engineer for a large company, this article is for beginners and intermediate students who have knowledge in computer science and students who don’t have. 14 | 15 | **Why use it?** 16 | When I enrolled in the faculty of computer science I didn’t know the difference between Hardware and Software, didn’t know what is a programming language, anything about web development, so I decided to make a change then I become a person who is very passionate about the field of technology. 17 | 18 | > First you must don’t feel you aren’t smart enough> 19 | 20 | ### Technical Tips 21 | *** 22 | 1. Focus on basic coding instructions, Online Resources: 23 | * [Introduction to computer science(CS50),](https://courses.edx.org/courses/course-v1:HarvardX+CS50+X/info) Harvard 24 | * [Introduction to computer science,](https://www.udacity.com/course/intro-to-computer-science--cs101) Udacity 25 | * [Introduction to computer science using Python,](https://courses.edx.org/courses/course-v1:MITx+6.00.1x+2T2017/info) Edx 26 | 27 | The more you code the better you’ll get, the muscles can’t grow without practicing, also publish your projects on any academic forum, and you should develop your portfolio. 28 | *** 29 | 2. Master one programming language (C++, Java, Python, JavaScript, Ruby, etc.), to do this you must write a lot of code and read a lot more. You need to be very comfortable in the language and be knowledgeable. 30 | * [Read more about choices](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/) 31 | * Online Resources: [30 Days of Code (Java),](https://www.hackerrank.com/domains/tutorials/30-days-of-code) HackerRank 32 | * Books: 1- Java, How To Program, 9th Edition 2- C++, From Control Structures Through Objects, 8th Edition 33 | *** 34 | 3. Object oriented programming: 35 | * [Software Development Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) 36 | * Bob Martin SOLID Principles of Object Oriented and Agile Design[Bob Martin SOLID Principles of Object Oriented and Agile Design](https://www.youtube.com/watch?v=TMuno5RZNeE) 37 | * SOLID Principles[SOLID Principles](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) 38 | *** 39 | 4. You should learn data structure: 40 | * Arrays, Online Resources: [Arrays,](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) Coursera - [Dynamic Arrays,](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) Coursera 41 | * [Linked Lists,](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) Coursera 42 | * [Stack,](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) Coursera 43 | * [Queue,](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) Coursera 44 | * [Hash Tables,](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) Lynda 45 | *** 46 | 5. Develop a strong knowledge of algorithms, algorithmic complexity, Big-O, and asymptotic analysis, Online Resources: 47 | * [Introduction To Algorithms,](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-spring-2008/index.htm) MIT 48 | * Asymptotic notation[Asymptotic notation](https://www.youtube.com/watch?v=iOq5kSKqeR4) 49 | * Intro to algorithm complexity analysis[Intro to algorithm complexity analysis](http://discrete.gr/complexity/) [Brute force algorithm] 50 | * greedy algorithm 51 | * divide and conquer algorithm 52 | * dynamic programming algorithms 53 | * genetic algorithms 54 | 55 | **Recommendation Book:** Introduction to Algorithms, 3rd Edition 56 | *** 57 | 6. Develop a strong knowledge of operating systems, 58 | * [Learn about caches](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) 59 | * Process and Threads 60 | 61 | **Recommendation Book:** Operating System Concepts, 8th Edition 62 | *** 63 | 7. Test your code, Learn how to catch bugs, create tests, and break your software, Online Resources: 64 | * [Software Testing,](https://www.udacity.com/course/software-testing--cs258) Udacity 65 | * [Software Debugging,](https://www.udacity.com/course/software-debugging--cs259) Udacity 66 | *** 67 | 8. Develop your computer architecture knowledge, 68 | * Numeric Representation 69 | * Binary Arithmetic and Bit Operations 70 | * Floating-Point Representation 71 | * Character Representation 72 | * Memory Organization and Access 73 | * Composite Data Types and Memory Objects 74 | * CPU Architecture 75 | * Instruction Set Architecture 76 | * Memory Architecture and Organization 77 | 78 | **Recommendation Book:** Computer systems A programmer’s Perspective 79 | *** 80 | 9. Learn Networking, Online Resource: [Network Fundamentals,](https://mva.microsoft.com/en-us/training-courses/networking-fundamentals-8249?l=vc8igMKy_304984382) MVA 81 | *** 82 | 10. [How the internet works,](https://www.khanacademy.org/computing/computer-science/internet-intro#internet-works-intro) Khan Academy 83 | *** 84 | 11. Then you should develop logical reasoning and knowledge of discrete math and statistics, Online Resources: 85 | * [Mathematics for computer scientists,](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/index.htm) MIT 86 | * [10 days of statistics,](https://www.hackerrank.com/domains/tutorials/10-days-of-statistics) HackerRank 87 | * [Game Theory,](https://www.coursera.org/learn/game-theory-1) Coursera 88 | * [The Map of Mathematics](https://www.youtube.com/watch?v=OmJ-4B-mS-Y) 89 | *** 90 | I will write a specific blog about system design, scalability, and data handling but you can read about it in [HiredinTech](https://www.hiredintech.com/courses), also I will write about data structure and algorithms that will include more resources and more definitions. 91 | --------------------------------------------------------------------------------