your guide to be a software engineer

18
Your Guide to be a Software Engineer How to start software engineering in a good way Many of us want to be a programmer, but they don’t know How? or where to Start? And what to Learn? And even what are the resources for learning? Here you will find all the answers to your Questions Ahmed Mater Introduction to Programming “Everybody in this country should learn how to program a computer because it teaches you how to think” Steve Jobs 1955-2011

Upload: ahmed-mater

Post on 14-Apr-2017

1.387 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Your Guide to be a Software Engineer

Your Guide to be a

Software Engineer How to start software engineering in a good way

Many of us want to be a programmer, but they don’t

know How? or where to Start? And what to Learn?

And even what are the resources for learning?

Here you will find all the answers to your Questions

Ahmed Mater Introduction to Programming

“Everybody in this country should learn how to program a computer

because it teaches you how to think” Steve Jobs 1955-2011

Page 2: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

The Content of the Speech:

1. What is Programming?

2. What is the language of the Computer?

3. The Different types of Computer Languages: 1. Programming Languages

2. Markup languages

3. Style Sheets

4. Scripting Languages

5. Query Languages

6. Data Exchanging Languages

4. Types of the Programming Languages: 1. Machine Language

2. Assembly Language

3. Low-Level Languages

4. High-Level Languages

5. The Main Majors of Programming: 1. Desktop Applications

2. Web Development

3. Mobile Applications

4. Game Programming

5. System Programming

6. Structured vs Object-Oriented Programming:

7. How to Learn Software Programming:

1. The English Language

2. Watching Courses

3. Reading Books and References

4. Which One to start with? (Courses or Books)

5. The Communities Websites

6. The Tutorial Websites

7. The Language Documentation

8. Getting Experience from the Experts and Professionals

9. The Online Judge and Problem Solving

10. Finally Where to start? What to learn first?

8. How to write a Code for a Program? 1. Defining the Problem

2. Planning the Problem

3. Coding the Program

4. Testing the Program

5. Documenting the Code

Page 3: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

9. What to focus on when you start learning software? 1. Perform the functionality

2. How to write a Readable Source Code

3. How to use the Debugger tool

4. The Algorithm of the Code

5. How to use Libraries in your code

10. The Academic Courses in College 1. Visual Basic

2. C Language Programming

3. C++ or Java Programming

4. Mathematics

5. Electronics

6. Digital Logic Design

7. Computer Organization and Architecture

8. Algorithms

9. Data Structure

10. Operating Systems

11. Computer Networks

12. Artificial Intelligence

13. Databases

14. Digital Control Systems

11. The Main Topics you can find in any Programming Language: 1. The Basics of the Language:

2. The Object-Oriented Programming:

3. I/O files (Binary or Text)

4. Collections, Generics and Data Structures

5. Database Connection

6. Server-Side Programming & Web Services

7. Multi-Threading and Parallel Programming

8. Handling Exceptions

9. Graphical User Interface (GUI)

10. Graphic Design (2D)

12. The Recommended Courses and Books

13. The Recommended Professionals

14. My Contacts (if you need any advice, Don’t hesitate to ask)

Page 4: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

1. So what is Programming? Programming is all about a problem in our life and we think about a way to solve it.

But in an academic perspective it’s about some steps which we call instructions to solve the problem.

Ex: How to go from here to the gas station:

1. Go ahead in this road for 1m

2. Take the first turn to the left

3. Then go straight and pass the first two turns

4. And take the third turn to the right

5. Finally you will find the gas station in the front

These steps are called an Algorithm to solve the problem and we will talk about it later on in the

part of the Academic Subjects, but we can notice here that this algorithm is written in our native

language which may be English or Arabic, but can the computer understand our language?

Of course Not!!!! Which lead us to another question.

2. What is the language of the Computer? Computer actually can understand only 2 numbers which we call them the Binary Digits (bits)

and this Language is called the Machine Language, but there are more other Types of Languages that

the computer can understand which are more advanced than the 0s and 1s.

3. So what are the Different types of Computer Languages?

1) Programming Languages: They are the Languages that talk to the computer directly

either on the Hardware level directly such as (Machine Language and Assembly) or on the

Software Level (Operating System) such as (COBOL, PASCAL, C, C++, Java, Python and

C#)

2) Markup languages: They are concerned with the structure of the Web pages, as telling the

web browser how to display the Webpages (Ex: they specify the Headers, Paragraphs,

Images and more other things in the web page to the browser), and also you have to know

that the HTML is the Markup Language for the web pages, but the XML is used to structure

Applications such as those developed in C# and in Java for Android (Ex: It says that there is

a button here and a text box there and so on)

HyperText Markup Language (HTML and XHTML and HTML5)

eXtensible Markup Language (XML)

3) Style Sheets: It is concerned with the beauty of the website which says (Ex: This Header

will be in this font, that font size and this color and so on), (another Ex: This border will be

with a specific thickness and has a margin of this value and so on), also you may notice that

some buttons change when you move your mouse over them this is also done by the Style

Sheets.

Both of the Markup and Style-Sheets are called Front-End of a Website.

Cascading Style Sheets (CSS & CSS3)

4) Scripting Languages: Those are the Languages of the servers, they are used to give

functionalities for the websites (Ex: comparing the username and password entered in a

website with the database and reply to the user), this is called a Server-Side Programming

at the Back-End of the Website.

Page 5: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

But the JavaScript is a little bit different than the other as it runs on the Web Browser not a

Server and it’s used to give life to the Web pages and make it more interactive with the user

by making the HTML more Dynamic to be called DHTML.

Do more things which you can notice when you search in google and you see the results

before clicking on the search button this is called the AJAX where the JavaScript

communicate with the Server and retrieve the results from the database and display them at

the same time.

Now the JavaScript has ready Libraries that you can use directly without rewriting them from

scratch such as JQuery.

PHP Hypertext Preprocessor (PHP)

Ruby on Rails

Python

JavaScript and JQuery

1. Document Object Model (DOM)

2. Asynchronous JavaScript and XML (AJAX)

5) Query Languages: They are the languages associated with the Database which are used

for dealing with databases by inserting or retrieving or delete or update the data.

Structured Query Language (SQL)

Procedural Language/Structured Query Language (PL/SQL)

XQuery and XPath (They are related to the XML)

6) Data Exchanging Languages: They are languages used to send data over the internet in

a form a structured message for example: (for the message in JSON, the data are values

associated with keys { key : value }), unlike (for the message in XML, where data is between

Tags <Tag> Data </Tag>)

JavaScript Object Notation (JSON)

eXtensible Markup Language (XML)

4. The Programming Languages:

1) Machine Language: This is the very basic language that the computer can understand or

to be more precise is what any machine or hardware can understand.

It consists of 2 digits (0 and 1) which are the representation of switching on and off a

transistor or an electronic switch in a Logic circuit, it’s a very complicated language and used

only for the Digital Logic Design.

ex: to add 2 numbers the instruction may be (0100 00 0010 1100)

2) Assembly Language: This language is more developed than the Machine Language as it

uses English words as codes instead of numbers to perform the operations such as (STO:

Store in Memory) (ADD: to add numbers) and more others. This is easier than using (1s and

0s) to write a program.

ex: to add 2 numbers which are 5 and 6 then print the result

STO R0 5 R0 is a Register (Temporary storage)

ADD R0 6

PRT R0

Page 6: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

3) Low-Level Languages: They are languages which are more developed than the

Assembly and the Machine Language, they use also the English words for instructions

(Ex: printf(): to o/p on the console) and symbols for operations (Ex: 3+2).

It’s simpler than Assembly, as some operations may need several lines of Codes in

Assembly which can be executed in only one statement in C Language.

Ex: to add 2 numbers, 5 and 6 then print the result ( printf(“%d”, (2+5) ); )

4) High-Level Languages: These are the most advanced Languages of them at all, they

support what is known as OOP (Object Oriented Programming) - and we’ll talk about it later-,

these languages can perform more advanced tasks like Network Development, Designing an

Application with GUI (Graphical User Interface), Database Management and report

generation and more other advanced stuff.

Examples of these Languages are Java, Python, C# and more other.

We have to know that The Machine Language is closer to the Hardware of the Computer and as

we go higher from the Assembly to the Low-Level to the High-Level the more we get far from the

Hardware.

And also the more we got far from the Hardware the more advanced stuff we can perform and

the slower the program will be. (For example: the program developed in C is hard to be coded but

faster than the program coded in java).

5. What are the Majors of Programming?

1) Desktop Applications: In which the programmer develops an application to run on a

desktop computer without using the internet like (MS Word or Notepad or AutoCAD), may be

application for small business such as an Accounting Application for a Mall, and this could be

accomplished by high-level Language such as: Java or C# or Python with the help of a

Database (if needed) such as MySQL or SQL Server or any other DB.

2) Web Development: In which the programmer develops an application to run on a server

so as a user, I will need access to the internet so I can use it, also to design a Web site with

many pages and services, and this could be accomplished using a Markup Language such

as HTML and Style Sheets such as CSS and a Scripting Language such as PHP or

JavaScript or may be a Programming Language such as Java or C# or Python, also with a

Database Management System (if needed) such as MySQL or PostgreSQL

3) Mobile Applications: In which the programmer develops an application to run on a mobile

platform (such as Android or Windows Phone or iOS) and devices such as Tablets or TVs.

But For each platform we use different Language and a different IDE

For Android you can use Java as a Language and Android Studio as an IDE

For Windows Phone you can use C# as a Language and MS Visual Studio as an IDE

For iOS you can use Objective-C or Swift as a Language and Xcode or Cocoa as an IDE.

4) Game Programming: In which the programmer develops Games and Graphical animated

applications, this major may be one of the difficult majors as it need to develop in a low-level

languages such as C++ as it runs faster and more efficient, it also require a high degree of

technical proficiency, (but trust me it’s fun to develop games)

You can also develop games using Java or Python and Web Games using HTML5 and JavaScript,

but the efficient games are developed in C++.

Page 7: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

5) System Programming: In which the programmer write codes in a low-level language that

will run on a piece of hardware (such as: programming a Micro-Processor to perform a

specific task) so it need to be fast and efficient.

Also for a big project we could call it an Operating System of the Hardware

The most common used Language in this Major are C++ and C Languages

6. Structured vs Object-Oriented Programming: During your career in programming you will encounter these two terms and you have to know

the difference between them:

1) Structured Programming: This is an old approach used in the Low-Level Languages

such as C & COBOL, this approach focuses on the process and the functionality more than

the Data, as you will see that the application programmed in C is a set of blocks of codes

called functions and there is one main block called main() function that uses the other blocks.

2) Object-Oriented Programming: this is a new programming approach used in the High-

Level Languages such as C++, C#, Python, Java, and this approach focuses on the Data

and the functionalities that works on this data, and encapsulate them in one container called

Class, so the application programmed in Java will be a set of Classes each one of them is

concerned with a specific topic, (Ex: Database Class that will deal with the database for the

insertion and retrieval of data) another (Ex: Networking Class that will deal with the data

from a web site or sending data to a server) and so on.

7. How to Learn Software Programming? Before anything, we have to know that the Computer Science Major is one of the hardest Majors

in the working careers, but on the other hand It’s considered one of the highest and well-paid

compared to other careers, and this because The CS Major is developing every day and more

technologies are introduced, and the more technologies you learn, the more you will get paid for

your career, and beside the Money if you are interested in puzzles and solving problems, then you

are in the right place and I wish you good luck in the Future.

Now you will know how to learn through some Points and I will recommend some good websites

and YouTube Channels for you:

1) The English Language: We all know that the Computer and the Computer Languages are

developed by the EU and US scientists so most of the good resources to study Computer

Science are in English Language, so My first advice is to start learning English that will help

you watch efficient courses and read good books and also you can share on the discussions

on the programming sites, understand them and benefit from their knowledge.

Recommended resources:

1. EngVid – YouTube Channel: http://bit.ly/1IyDSRl

2. English Grammar - Al Darayn Academy : http://bit.ly/1Kqziaf

3. English Beginner - Al Darayn Academy : http://bit.ly/1Di0SqW

4. Mr Ehab Ramzy: http://on.fb.me/1JkbgPy

5. Mr Abdullah Amer: http://on.fb.me/1IoppGl

6. Ahmed Mater – How to learn English: http://on.fb.me/1N5SpYv

Page 8: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

2) Watching Courses: You will notice that the instructor in the course will focus on how to

work on the IDE (the program for writing the code) and will teach you the main and most

used statements of Codes, and he will focus on the working and practical side.

3) Reading Books and References: The writer of the book will teach you every single

information about the topic even if they are additional or rarely used and to be good in any

CS major you have to read books or at least have a reference so you can revise it when you

need, This will lead us to the next Question?

4) Which One to start with? (Courses or Books) We have to know that in our learning journey, we will definitely need both the courses

and books to improve our skills and learn more technologies and languages.

but as a Start and if you are beginner or know nothing about programming, then you have to

focus on learning through courses as they will be easy for you at the beginning and will focus

on the important topics and practicing on the IDE.

And after one or two courses you have to go for additional information through books.

and One of the most good benefits of the books are that they will make you Open-minded

and think in different ways and face more problems and some books introduce case studies

from the real life.

5) The Communities Websites: As we mentioned before that reading is one of the main

methods to learn, another resource is the community Websites that offer discussions about

programming and the problems facing the juniors.

So how this websites works? And how you can benefit from them?

Every one of us will face many problems during his career of programming and also

will have questions that he can’t find their answers in Courses or Books.

Now there are websites that offer a very helpful service in which you can post your

question and there are some other experts in the field will see your question and

answer it, and you will try the answers given and for the correct answer you will

confirm it.

These Websites offer their services for free and there is great number of experts and

professionals devoting their time to see the questions and answering them and the

websites organize everything and mark the questions if they have been answered or

still not answered, so people can easily search through the Website.

Now for you as a beginner in the field when you face any problem try to search for the

answers on these websites and read about every one’s experience and the answers

and try the solutions, and when you become an expert don’t forget to help the juniors.

Recommended Websites:

1. Stack Over Flow: http://bit.ly/1H6BvGw

2. Reddit : http://bit.ly/1Kx8cSB

3. Code Project: http://bit.ly/1Kx8nxl

4. Site Point: http://bit.ly/1Kx8qsV

5. DZone: http://bit.ly/1Kx8Ak5

6. Bytes: http://bit.ly/1Kx8ARa

Page 9: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

6) The Tutorial Websites: These are more like the books but they are a little simpler, these

websites offer you a simple written tutorials with some code samples and some written

illustration of the Language topics.

As you are going to be a programmer you don’t have to remember everything, on the other

hand you need to have more other resources some may be big references for big issues and

big problems which are Books and other simple resources for fast remembering a simple

information, and these Tutorial Websites comes in handy for that.

Recommended Websites:

1. Tutorials Point: http://bit.ly/1IXph0Y

2. C plus plus: http://bit.ly/1UmeI0m

3. C Programming: http://bit.ly/1G0xVKi

4. Mozilla MDN: http://mzl.la/1ggGbRr

5. W3SchoolCode Project: http://bit.ly/1G0xVKj

7) The Language Documentation: For every Computer Language you will find an official

website where you can find the Libraries of the language and the different versions and the

most of them that you have to focus on is the Documentation of the Language, and if you

don’t know what the documentation is? Well here is the answer, it’s the syntax of the

language including the functions and classes (if it’s an OOP language), and for every class

and function you find a simple description of what does the function do? And what is its

inputs and its output? And more other helpful information.

These are called the Libraries and the descriptions are called the Documentation.

Recommended Websites:

1. Python Documentation: http://bit.ly/1Kx9ltr

2. Java Documentation: https://docs.oracle.com/javase/7/docs/api/

3. C# Documentation: http://bit.ly/1Kx9Tj6

8) Getting Experience from the Experts: in your career you will meet many other people

who have more experience than you in the field, and my advice to you is to ask them and

gain as much experience as you can from them, also try to see how they start their career

and how they got their experience, also try to see their codes - if they are open source and

available to you - and try to simulate them and see how they write and how they think.

In our field don’t be shy, if you are stuck in a middle of something try to search for a

solution - especially in the Community Websites - and if you don’t get your answer, ask

others who have more experience and show them what you have got from searching

and they will sure help you and show you what is missing.

Another advice don’t depend on other to solve your problems and write your codes, or

you will end up know nothing, you will have codes that aren’t yours and you couldn’t

even write them again on your own.

Searching for a solution of a problem will help you see different thinking ways of

different peoples and this will enhance your thinking skills, and your experience will

increase, unlike other people who don’t search before asking, they got only one

answer and in an easy way, and believe me the easy you got the answer the faster

you will forget it, So Search for the information if you want to be good in your field.

Page 10: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

9) The Online Judge and Problem Solving: There are many websites that offer too many

problems for you so you can think about the solutions, practice and apply what you have

learned before, and the problems are categorized and there are highly advanced problems

so you can practice the algorithms you have learned too.

Recommended Websites:

1. Code forces : http://bit.ly/1KxasJA

2. Hacker Rank: http://bit.ly/1KxaDVt

3. A2oj: http://bit.ly/1KxayAV

4. Timus Online Judge: http://acm.timus.ru/

5. UVA Online Judge: http://bit.ly/1KxaPnD

10) So Where to start? and What to learn first? We have spoken before about the majors of the Programming and Software, and you

have to choose one of these majors to work on and continue your career, but the most of us

don’t know much about the major and want to take some time to choose the major.

But at the same time you don’t have to take so long in thinking and don’t waste your time

during thinking, and my advice is to start learning English with a general programming course

to learn the initial codes and take a general look on the programming language.

Recommended Courses:

1. Lynda - Foundation of Programming: Fundamentals: http://bit.ly/1zIQSol

2. Dr. Ahmed Mohamed El Said - C++ Programming: http://bit.ly/1zGy8kR

3. NU – Islamabad – CS201 Introduction to Programming: http://bit.ly/1TLtv53

8. How to write a Code of a Program? When you have a problem and you want to make an application to solve this problem then

you have to follow these 5 main steps in order to make a good application

1) Defining the Problem: Ask yourself what is the problem? (May be searching for a solution

to a Mathematical Equations) and try to perform step (b) which is planning this problem, but if

it’s difficult to be planned, you can break it into smaller problems and solve every problem

alone, and this technique is called Divide-and-Conquer.

2) Planning the Problem: This may be done by either two ways

(Drawing a Flow-Chart): which is a set of shapes (circles, squares, … so on) which

represent the flow of the program step by step, or

(Writing a Pseudocode): which is writing the steps that the computer has to follow in order to

perform the task and they are written in any Natural Language (English or Arabic).

3) Coding the Program: This is about transforming the simple sentences of the pseudocode

into instructions in any programming Language.

4) Testing the Program: After coding the program you have to try it and see the result, most

of the programs don’t give correct results from the first time so you have to see where is the

problem? and try to fix it out.

5) Documenting the Program: it’s about writing a detailed description about the project, and

it may include the comments in the code, also the Flow-Chart and the Pseudocode of the

Program, and this is an important step in programming procedure as it helps the programmer

to remember everything about the project in the future.

Page 11: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

9. What to focus on when you start learning

1) Perform the functionality: You have to practice on solving problems and try as many as

you can while learning, also try to code these solutions and you have to know that each

problem may have many possible solutions, some of them are better than the other, so you

can try to solve it and improve your solution in the future.

2) How to write a Readable Source Code: After some time of learning how to program

and get used to face many problems and solve them, try to simulate the codes of the

professionals (Ex: in the naming of variables and the arrangement of the code), this is very

important specially for the big companies where you have to work on a project with many

engineers and coders and you don’t have to explain everything in code for them because

there are conventions and standards all of them follow so they can easily understand each

other.

3) How to use the Debugger tool: When you code a problem you will face some errors

(logical errors), and those are hard to find especially if you have an infinite loop in your

program, so there are some tools that can help you to follow the execution of your application

and in every step you can see the values of the variables and you can find the step where the

code fails and solve it, this tool is called The Debugger, and you must learn it.

4) The Algorithm of the Code: As I said in the first point, we have to face many problems

and try to solve them, and each problem may have many solutions and some of them are

better than the other and you have to try solving with the better solution.

The Algorithm of the code means the steps to solve the problems. You have to know that

there are some famous problems that have a good solutions (Ex: finding the shortest path in

a map) this can be accomplished through many algorithms and each of them has its own

properties, so you have to study algorithms and make good use of it in your project

5) How to use Libraries in your code: Now the programming languages offers you a ready

codes to use instead of writing from scratch, and this codes are already enhanced, safe and

faster in execution and with them you can accomplish more things and highly advanced

things.

10. The Academic Courses in College: You will spend 4 or 5 years in your college either you are a Computer and Informatics student or

Engineering student and during this time you will study some practical subjects and other are more

academic than practical, so you have to know how to make good use of each subject and how to

enhance your skills during your time of study in the college.

Another point, may be some of you think that the study in college is humble and the subjects are

very simple and naïve compared to what you will work with in a company, but you have to know that

it’s not that bad and my advice to you is to have your resources to study from and be step-ahead

from the college and try to improve yourself through Courses and Books.

Finally and since I’m in Engineering College, I will talk about the subjects we study in the Computer

and Systems Dept. :

1) Visual Basic: This subject will introduce you to the programming and will focus on the GUI

of the program and a little about the functionality, this may be a good start but it’s not

practical at all, and not used in any company, it’s just for academics and to do simple stuff.

Page 12: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

2) C Programming: It’s a practical subject where you will have your true first steps in

programming in the college, and whatever your major is, The C Language will benefit you of

course, It will focus on the basics of the programming.

Recommended Courses:

1. The New Boston – C Language: http://bit.ly/1IoLNR2

2. Learning Lad – C Language: http://bit.ly/1K1qoUc

3. Dr. Ahmed Sallam – C Language: http://bit.ly/1K1qoUc

Recommended Books:

1. C – The Complete Reference: http://amzn.to/1TLo5an

2. C – Primer Plus : http://amzn.to/1TLpptV

3. Head first C: http://amzn.to/1TLpkGm

3) C++ or Java Programming: They are very practical subjects that you will use in your

work at a company for sure (may be C++ isn’t widely used, unlike Java), This subject will

revise the basics you have studied in C (better for you to revise them on your own) and will

continue in the Object-Oriented Programming where you will study the classes,

encapsulations, Inheritance, and may be Polymorphism and some other advanced stuff.

Recommended C++ Courses:

1. Dr. Ahmed Mohamed El Said - C++ Programming: http://bit.ly/1zGy8kR

2. Eng. Mostafa Saad - C++ Programming: http://bit.ly/1P7eV7O

3. The New Boston - C++ Programming: http://bit.ly/1IoMU3g

4. The New Boston - C++ GUI with Qt: http://bit.ly/1IoMpWW

5. Learning Lad - C++ Course: http://bit.ly/1K1qP0S

Recommended Java Courses:

1. Lynda - Java Essential Training: http://bit.ly/1bzea56

2. Lynda - Java Advanced Training: http://bit.ly/1JThqqH

3. The New Boston - Java Beginner: http://bit.ly/1IoMU3g

4. The New Boston - Java Intermediate: http://bit.ly/1IoMpWW

5. Eng Ahmed Helal - J2SE: http://bit.ly/1KxfuGd

6. Eng Mohamed Essa - Java Programming: http://bit.ly/1JJ7Tnx

Recommended Books:

1. C++ – The Complete Reference: http://amzn.to/1TLo9XI

2. C++ Primer Plus: http://amzn.to/1TLovgS

3. The C++ Programming Language: http://amzn.to/1TLos4I

4. Java The Complete Reference: http://amzn.to/1TLoCcp

5. Thinking in Java: http://amzn.to/1TLoMQO

6. Head first Java: http://amzn.to/1TLoFoz

4) Mathematics: During your 5 years in the college of Engineering, you will study Math, and

mayn’t be all the problems are solved by Math, but Studying Math enhances your thinking

skills and some of the solutions can but enhanced by Mathematics, so don’t ignore it.

Page 13: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

5) Electronics: As an Electric Engineer, you will study Electric Circuit and Electronics, each in

a separate subject but for a software engineer you have to learn electronics which is the main

ingredient of the Computer Hardware, and this will help you in many ways first, you will learn

how the computer works and how this hardware work, second it will help you to understand

How the Embedded Systems work and will pave the road to The Digital Logic Design.

The Main Components you will study are (Diode and Transistors)

6) Digital Logic Design: This may be one of the interesting subjects you will study, and you

will learn many things about how the machines work. Also you will learn more about the

Machine Language and what does the 1s and 0s actually mean and how these 2 numbers

can do different things. You will also learn how to design Logic Circuits, but they will be on

paper not practical, so my advice to you is to try and buy some components and try to

connect them and apply what you have learn in action, Trust me it’ll be more interesting than

what do you think.

Recommended Courses and Books:

1. NPTEL – Digital Circuit & Systems Design: http://bit.ly/1TLq3Yc

2. NU – Islamabad - CS 302 – Digital Logic Design: http://bit.ly/1TLquBU

3. Digital Design Principles and Practices : http://amzn.to/1TLruG1

7) Computer Organization and Architecture: This is one of the most important subjects

that you will study in the college, you will learn how the computer works as a total system,

you will study the CPU, ALU, Main Memory, Cache, I/O Devices, and more other things, you

won’t just learn how they work, but you will study them in detail and you will also study some

codes in the Assembly Language and how it can be executed by the Processor.

This subject is very very important if you are going to work in the field of the Embedded

Systems as you will learn how to design a system and how the components will work

together, and if you are going to work as a pure software it will be good to know how the

computer works in detail.

Recommended Courses and Books:

1. Dr Ahmed Sallam – Old x86 Assembly Language: http://bit.ly/1NerEOB

2. Dr Ahmed Sallam –x86 Assembly Language: http://bit.ly/1NerI0O

3. NU – Islamabad – CS401 - Computer Arch. and Assembly: http://bit.ly/1TLrW7h

4. NPTEL - Computer Organization: http://bit.ly/1KviIJS

5. Bilkent University - CS-224 Computer Organization : http://bit.ly/1KviQsS

6. Coursera - Computer Architecture: http://bit.ly/1Kvk4V5

7. Computer Organization and Architecture William Stallings: http://amzn.to/1TLsslG

8) Algorithms: This is one of the interesting subjects you will study in college, but let me tell

you more about Algorithms and what it is about? First the word Algorithm is named after the

Arabic scientist Muhammad ibn Musa al-Khwarizmi the greatest mathematician who

founded the science of Algebra, and while he was working on Algebra, he noticed that there

are some problems can be solved by some constant steps, so he worked on collecting every

problem and its own set of steps to solve it, and by the time when the science of

programming is founded, each set of the steps to solve a problem in programming is called

an Algorithm for that problem, there can be more than one algorithm for each problem.

In this subject, you will learn how to study the Algorithm and How to specify which algorithm

is faster, which is consuming more memory storage and this comparison will help you specify

Page 14: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

which algorithm is suitable for your application.

You will also study many algorithms to solve some problems (such as Sorting, Searching,

Compression, and more other problems) and notice that each of these problems can be

solved by several algorithms and each has its own properties.

Recommended Courses and Books:

1. NU – Islamabad – CS502 - Fundamentals of Algorithms: http://bit.ly/1TLrYvO

2. Coursera - Algorithms: Design and Analysis, Part 1 : http://bit.ly/1fYY1HW

3. Coursera - Algorithms: Design and Analysis, Part 2 : http://bit.ly/1fYY72h

4. Data Structure and Algorithms in Java: http://amzn.to/1TLtcam

5. Introduction to Algorithms: http://amzn.to/1TLtiyY

9) Data Structure: Sometimes it’s attached to the Algorithm, but it’s a different subject. This

Subject is about how you can manipulate data in Memory or Database, you will study

different ways to store and retrieve data, and other functions to manipulate Data (Ex: The

Stack DS which works with FILO – where the first element enters an array will be the last to

be retrieved) (another Ex: The Queue DS which works with FIFO – where the first element

enters the array will be the first element to be retrieved) and more other Data Structures, and

you will study each one and its properties and how they work so you can choose a suitable

one for your project.

Recommended Courses and Books:

1. NU – Islamabad – CS301 Data Structures: http://bit.ly/1TLs9aD

2. UC Berkeley - CS61B - Data Structures: http://bit.ly/1TLxNJC

3. Data Structure and Algorithms in Java: http://amzn.to/1TLtcam

10) Operating Systems: It’s one of the important subjects, where you will study how the

computer hardware executes the applications and what is going on behind the scene when

you for example double click on a program on your desktop, you will also learn about some

important terms such as Threads, Parallel execution of programs, Client-Server

communications and How the I/O devices works.

The OS is considered the interface between the Hardware and the User so you will learn

what your simple clicks do inside the Hardware and you How the OS manages all the

programs running and How the Processor executing them.

This subject is associated with the Computer Organization as OS manages the working of

the hardware and introduce it to the user in a friendly manner, and it’s very important to

understand the Operating Systems if you want to design large Embedded System that will

perform many tasks.

Recommended Courses and Books:

1. NU - Islamabad - Operating Systems: http://bit.ly/1TLs06X

2. Operating Systems by P.K.Biswas Sir: http://bit.ly/1KvjXZF

3. Dr Ahmed Sallam - Old Operating Systems: http://bit.ly/1NerDtZ

4. Dr Ahmed Sallam - Operating Systems: http://bit.ly/1NerDdw

5. Operating System Concepts: http://amzn.to/1TLxVJ8

11) Computer Networks: Another interesting subject where you will study what is the internet

and how it works? Also you will understand how the data are transmitted over the internet,

and how can two applications communicate with each other, and you will study some devices

Page 15: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

such as: Routers, Switches, Bridges and Hubs, and how the networks are constructed, and

many other interesting things.

This Subject is considered the basics of the IT Major in Computer Science, and if you are

going to do programming for a Client-Server programming then you have to understand How

the network works? And how the data are transferred through the network?

It’s also very helpful in the field of the Internet of Things (IoT).

Recommended Courses and Books:

1. Coursera – Computer Networks: http://bit.ly/1TLxYoi

2. NTPEL – Computer Networks: http://bit.ly/1TLy3IR

3. Computer Networking – Top-Down Approach: http://amzn.to/1TLy7YR

12) Artificial Intelligence: This is the subject of those who want to work in the Robotics field,

where you will learn more and more algorithms that you can use to develop an intelligent

Robots, Algorithms for Searching, Solving Problems, Genetic Algorithms.

The field of the AI (Artificial Intelligence) is vast and huge and what you will learn in this

subject is an introduction, so if you are interested you have to continue in more advanced AI

fields such as: Machine Learning, (NLP) Natural Language Processing, Computer

Vision, (ANN) Artificial Neural Networks and more other.

Recommended Courses and Books:

1. Dr Ahmed Sallam – Introduction to Artificial Intelligence: http://bit.ly/1NerBlN

2. Udacity – Introduction to Artificial Intelligence: http://bit.ly/1TLyjYm

3. Artificial Intelligence A Modern Approach: http://amzn.to/1TLyliH

13) Databases: It’s one of the important subjects, and from its name it’s concerned with the

Databases, and you will study the different types of Databases and how to design a database

and how to connect the tables together, also you will study the SQL Language which is used

to make queries from the database to store data in or retrieve data from the database, so it’s

very important to study this subject especially if you are working on a project in which you will

need a database, and even if you aren’t working on a project, try to practice on one, while

studying this subject.

Recommended Courses and Books:

1. NU – Islamabad – CS403 - Database Management Systems: http://bit.ly/1TLs3Q4

2. Lynda – Foundation of Programming – Databases: http://bit.ly/1H5XDAH

3. Head First SQL: http://amzn.to/1TLytPk

4. Beginning Database Design: http://amzn.to/1TLzaYQ

14) Digital Control Systems: this subject may be more Hardware than being a Software but it

has a software implementation, In the Digital Control Systems, you will study the types of the

controllers and systems and how to design a controller to control this system, and these

systems may be such as controlling an Air Conditioning to be constant on a specific

Temperature, or controlling a Water-level in a Tank, and more other systems, you can notice

that they are hardware (Controlling Motors or pumps and so on), so where is the software?

The answer is in the controller which will have a Micro-Controller programmed to control the

system at different states.

Page 16: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

11. The Main Topics you can find in any Programming Language:

1) The Basics of the Language: this is the part of the basics where you will study the types

of variables and Data Types and how to make loops and Decisions and how to create

functions from the codes to reuse them again several times.

2) The Object-Oriented Programming: we talked before about the OOP, so in this section

you expect to study the attributes and Methods and how to build a class also you will learn

about the inheritance between classes and the polymorphism which is the class takes many

forms

3) I/O (Binary or Text): this section is about the streams and data and how to read from and

write to the files either they are text or other types such as sound, video and so on.

4) Generics, Collections and Data Structures: this section is about the data structure

where every language has its own Libraries of these Data Structures and you will just use

them directly.

5) Database Connection: you will study here how to connect your code with a database and

how to store and retrieve data in the Database through your program.

6) Server-Side Programming & Web Services: you will study here how to code an

application to run on a server and how to connect you application with another one on a

server and how to communicate through the network, also how to build a web service that

can be called by the application in the future.

7) Multi-Threading and Parallel Programming: you will study in this section how to divide

your application into separate parts so they can run together in parallel which decreases the

executing time of the application and makes it more faster

8) Handling Exceptions: the good applications are those that don’t crash at any error

happens, so you will study here the different types of errors (Exceptions) and how to handle

them to keep the application stable.

9) Graphical User Interface (GUI): in this part you will learn how to design a friendly user

interface such as Button, Textboxes, and Select lists and so on. And how to code the

functionality of the buttons and the other components

10) Graphic Design (2D): you will study here how to draw using the programming language so

you do some graphs in the Applications or developing applications with graphics such as

developing games.

Page 17: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

12. The Recommended Courses and Books: First there is something I want to talk about: Many of you when they see many links for courses

or many books introduced they got disappointed and think that it’s a big deal and they can’t handle

it, so I want to say this, When I give many links courses for different people I just wanna introduce

different styles of learning and writers for books, but for you as a student you will end up with only

one course or a book that you prefer and get comfortable with his style.

This is because some people prefer the detailed explaining and the many examples and some

others prefer the fast information and the abstract one, and they practice by themselves.

So you just take a look on the courses and the books, choose the best one of them for you and then

watch the course or read the book.

1) The PHP Language:

PHP - Ahmed Syam - تعليم اساسيات : http://bit.ly/1SDRNgR

Ahmed Syam - PHP Zatona: http://bit.ly/1mu2kiv

Ahmed Syam - PHP CMS October 2014: http://bit.ly/1mu2kPp

Eng. Mohammed Yahya - PHP and MySQL : http://bit.ly/1SDSRRS

The New Boston - PHP Stock Market Analyzer: http://bit.ly/1IoMtGc

The New Boston - PHP Tutorials: http://bit.ly/1IoMY3a

2) The C# Language:

Adel Sabor - Web Application C# ASP.Net: http://bit.ly/1LGsWXz

Adel Sabor - Course ASP: http://bit.ly/1jqehU1

Adel Sabor - ASP.NET C# SQL Server: http://bit.ly/1jqetTl

Adel Sabor - ASP.Net & AJAX Controls: http://bit.ly/1OmNCEM

Adel Sabor - C# & Asp.net Diplomate: http://bit.ly/1mu2BSs

The New Boston – C# Language: http://bit.ly/12eO9TL

3) Python:

Eng. Mohamed Essa – Python Programming : http://bit.ly/1mu2sys

Some Videos of Python Web Development: http://bit.ly/1mu2whu

The New Boston - The Python 3.4: http://bit.ly/1BtORxp

The New Boston - Python GUI with GTK+ 3: http://bit.ly/1IoKLEU

The New Boston - Python Website Scanner: http://bit.ly/1IoKQIE

The New Boston - Python GUI with Tkinter: http://bit.ly/1GYUaFz

4) XML:

Lynda – XML Essential Training: http://bit.ly/1DaeLRV Lynda – XML integrated with Java: http://bit.ly/1MGGORo

Ibrahim Qudeeh – XML Course: http://bit.ly/1Z9MENk

5) HTML & CSS:

El Zero Web School Courses: http://on.fb.me/1O4EPFG

Free4Arab - HTML & CSS: http://bit.ly/1LSExCw

Free4Arab – CSS: http://bit.ly/1Cl238j

Ibrahim Qudeeh – HTML: http://bit.ly/1IERduW

The New Boston - XHTML and CSS: http://bit.ly/1LSEpTN

30 Days to Learn HTML & CSS: http://bit.ly/1fhitEy

6) Ruby on Rails:

Learn Ruby on Rails from Scratch: http://bit.ly/1mu2zdm

Ruby on Rails 4.0 Lectures: http://bit.ly/1mu2y9f

The New Boston - Ruby Programming: http://bit.ly/1IoMvhd

Page 18: Your Guide to be a Software Engineer

Your Guide to be a Good Software Engineer February 7, 2016

___________________________________________________________________________________________ Written by: Eng. Ahmed Mater

7) JavaScript & JQuery:

Lynda – JavaScript Essential Training: http://bit.ly/1EW7omq

Lynda - JavaScript and JSON: http://bit.ly/1F97W7G

Lynda - JavaScript for Web Designers: http://bit.ly/1uxu9Uz

The New Boston - JavaScript: http://bit.ly/1dHIgnL

The New Boston - jQuery: http://bit.ly/1CWkc75

The New Boston - AJAX: http://bit.ly/1IoMk5G

El Zero Web School Courses: http://on.fb.me/1O4EPFG

Eng. Youssef Islmail – JavaScript: http://bit.ly/1NJ5O89

Ibrahim Qudeeh – JQuery 1: http://bit.ly/1ChApsv

Ibrahim Qudeeh – JQuery 2: http://bit.ly/1NJ64nm

Adel Sabor - Intro to Web : HTML5+CSS3+JavaScript: http://bit.ly/1JQfexT

8) Databases:

Ahmed Syam - SQL Language: http://bit.ly/1SDRRx4

Data Access Solutions using C# & ADO .NET: http://bit.ly/1mu2DKa

Data Access By Eng-Eslam Ghanem: http://bit.ly/1mu2K8i

Adel Sabor - JDeveloper 11g Course: http://bit.ly/1jqdUc5

Adel Sabor - Oracle Database SQL & PL/SQL: http://bit.ly/1jqdW3G

Learning SQL Server 2012: http://bit.ly/1mu2Mxc - م. أحمد النجار

Eng. Ahmed Habib - Oracle Developer (SQL): http://bit.ly/1mu2FBE

The New Boston - MongoDB for Beginners: http://bit.ly/1IoLrtW

The New Boston - MySQL Database: http://bit.ly/1IoMvxR

9) J2EE Java Enterprise Edition:

JSP-Servlet-JSF: http://bit.ly/1mu2qXi - م. عهود على

Eng. Ibrahim Eladdah - Java EE: http://bit.ly/1mu2rud

Adel Sabor - Java Course Applet Servlet – JSP: http://bit.ly/1MWVdW1

Adel Sabor – JSF using JDeveloper: http://bit.ly/1jqeXsA

13. The Recommended Professionals: Ahmed Eltabakh : Embedded Systems : http://bit.ly/1i1ncvx

Hamdy Soltan : Embedded & Hardware : http://bit.ly/1i1neDy

Mahmoud Samir Fayed : Programming : http://bit.ly/a25sw

Abdallah Eid : Programming : http://bit.ly/qswcafw

Ali Hamdi : Web Design : http://bit.ly/AHamdi

Mohamed Yahia : Web Development : http://bit.ly/MYahia

Ahmed Syam : Web Development : http://bit.ly/ASyam

Ahmed Tartour : Database : http://bit.ly/ATartour

Mohamed Mostafa : Database : http://bit.ly/asdtckq

Free4Arab : Networking : http://bit.ly/xcvwaz

Adel el Hamidi : Networking : http://bit.ly/AHamidi

14. My Contacts: Free to contact me at anytime (preferred through Facebook) LinkedIn : https://www.linkedin.com/in/ahmedmater

FB Group: http://on.fb.me/1MqbSFi

FB Profile: https://www.facebook.com/ahmedmater20

YouTube Channel: http://bit.ly/20lQl67

Facebook Page – Free Courses and Books: https://www.facebook.com/free.Course.book

Facebook Page – Books and MOOCs: https://www.facebook.com/Books.And.Moocs

E-mail: [email protected]