Essential Programming Skills Guide
Essential Programming Skills Guide
30 ALGORITHM
Preparing the chapter: Eng. Hazem Hamzah
Proofreading: Eng. Mohammed Aldhanuna
49 SDLC
Preparing the chapter: Eng. Yazan Sartawi
Proofreading: Eng. Mohammed Aldhanuna
58 Clean Code
Preparing the chapter: Eng. Amer Kherbek
Proofreading: Eng. Mohammed Aldhanuna
63 Database (DB)
Preparing the chapter: Eng. Humam Dawood
Proofreading: Eng. Qais Jarbou
2
91 Basic of testing
Preparing the chapter: Eng. Hazem Hamzah
Proofreading: Eng. Qais Jarbou
117 Creativity
Preparing the chapter: Eng. Youmna Yazji
Proofreading: Eng. Qais Jarbou
3
Introduction
Programming is now one of the most demanded jobs in the world.
Many people are willing to learn about it, not just for
seeking a profession but also because it’s a real life style .
In this book, you’ll learn about the key
skills needed to be a good programmer.
We gathered the top hard and soft skills that
are important to your programming journey.
We hope you gain all the benefit from our
book, and let it be a simple guide for you..
I am an Engineer Team
4
5
Hard
Skills
Networking Basics
1
W elcome to the networking basics. If you want to be a
successful engineer, you must know something about
everything and everything about a specific thing.
So, you should learn the basic principles of networking. At the
end of this chapter you will be able to determine the network
components, network topologies, network types, transport
mediums, network models, addressing types and networking
protocols.
Computer networks
A computer network is a system for connecting two or more
devices using communication system technologies for the
exchange of information, resources, and data between them
such as printers and applications.
Network components
The network consists of terminals, network nodes, and a
communication medium.
Network terminals
They are devices that end users use such as computers, mobiles,
printers, scanners, Applications … etc.
7
Network nodes
They are devices that connect the terminals to each other and
connect the network to other networks such as hubs that connect
terminals physically to each other, repeaters that improve the
physical signals, switches that connect the elements in one
network, routers that connect the network to the other networks
… etc.
Communication medium
use three types of physical cables:
1. Coaxial Cables: It is a type of copper cable used to carry
high frequency electrical signals with low losses such as cable
TV.
8
3. Fiber Optics: A fiber-optic cable, also known as an optical-
fiber cable, is an assembly similar to an electrical cable, but
containing one or more optical fibers that are used to carry
light, there are two kinds of them:
• Single Mode (SM): Where a single light beam is
t r a n s f e r re d .
• Multi-Mode (MM): Where several light beams are
t r a n s fe r re d .
9
Network Topologies
It means how to connect the terminals and the network›
nodes to perform networking, there are many kinds of network
topologies:
• Mesh topology
All the network nodes are connected to each other. Mesh has
n(n-1)/2 physical channels to link n devices.
10
• Bus topology:
Bus topology is a network type in which every computer
and network device is connected to a single cable. with two
endpoints.
11
• Ring topology
It is called ring topology because it forms a ring as each
computer is connected to another computer, with the last one
connected to the first. Exactly two neighbors for each device.
12
• star topology
In this type of topology all the computers are connected to a
single hub through a cable for each. This hub is the central
node and all others nodes are connected to the central node.
13
• Tree topology
It has a root node and all other nodes are connected to it,
forming a hierarchy. It is also called hierarchical topology. It
should at least have three levels to the hierarchy.
14
• Hybrid Topology
It is a mixture of two or more topologies. For example, if in an
office; ring topology is used, and in another; star topology is
used, connecting these topologies will result in Hybrid Topology.
15
Network Types
A computer network can be categorized by their size to four
types:
PAN
16
MAN (Metropolitan Area Network)
• A metropolitan area network is a network that covers a
larger geographical area by interconnecting a different LAN
to form a larger network.
• Government agencies use MAN to connect to the citizens
and private industries.
Uses of Metropolitan Area Network:
• MAN is used in communication between the banks in a city.
• It can be used in an Airline Reservation.
• It can be used in a college within a city.
• It can also be used for communication in the military.
17
WAN (Wide Area Network)
• A Wide Area Network is a network that extends over a large
geographical area such as states or countries.
• The internet is one of the biggest WAN in the world.
• A Wide Area Network is widely used in the fields of business,
government, and education.
18
Network Models
• The ISO (International Standards Organization) has developed
a layered approach. In a layered approach, networking concept
is divided into several layers, and each layer is assigned a
particular task. Therefore, we can say that networking tasks
depend upon the layers.
• The basic elements of a layered architecture are services,
protocols, and interfaces.
• Service: It is a set of actions that a layer provides to
the higher layer.
• Protocol: It defines a set of rules that a layer uses to
exchange the information with a peer entity. These
rules mainly concern about both the contents and
order of the messages used.
• Interface: It is a way through which the message is
transferred from one layer to another layer.
OSI Model
• OSI stands for Open System Interconnection. It is a reference
model that describes how information moves from a software
application in one computer through a physical medium to
the software application in another computer.
• OSI consists of seven layers, and each layer performs a
particular network function.
• OSI model was developed by the International Organization
for Standardization (ISO) in 1984, and it is now considered as an
architectural model for the inter-computer communications.
• OSI model divides the whole task into seven smaller and
manageable tasks. Each layer is assigned a particular task.
• Each layer is self-contained, so that the task assigned to
each layer can be performed independently.
19
OSI Layers
There are seven OSI layers. Each layer has different functions.
A list of seven layers are given below:
• Physical Layer
• Data-Link Layer
• Network Layer
• Transport Layer
• Session Layer
• Presentation Layer
• Application Layer
Physical layer
• The main function of the physical layer is to transmit the
individual bits from one node to another node.
• It is the lowest layer of the OSI model.
• It establishes, maintains and deactivates the physical
connection.
• It specifies the mechanical, electrical and procedural network
interface specifications
20
OSI Model
• Line Configuration: It defines the way how two or more
devices can be connected physically.
• Data Transmission: It defines the transmission mode whether
it is simplex, half-duplex or full-duplex mode between the
two devices on the network.
• Topology: It defines the way how network devices are
arranged.
• Signals: It determines the type of the signal used for
transmitting the information.
◌ Data-Link Layer
• This layer is responsible for the error-free transfer of data
frames.
• It defines the format of the data on the network.
• It provides a reliable and efficient communication between
two or more devices.
• It is mainly responsible for the unique identification of each
device that resides on a local network.
• It contains two sub-layers:
• Logical Link Control Layer
• It is responsible for transferring the packets to the
Network layer of the device that is receiving.
• It identifies the address of the network layer
protocol from the header.
• It also provides flow control.
21
• Media Access Control Layer
• A Media access control layer is a link between
the Logical Link Control layer and the network›s
physical layer.
• It is used for transferring the packets over the
network.
◌ Network Layer
• It is the third layer that manages device addressing, and
tracks the location of devices on the network.
• It determines the best path to move data from the source to
the destination based on the network conditions, the priority
of service, and other factors.
• The Data link layer is responsible for routing and forwarding
the packets.
• Routers are the third layer devices, they are specified in
this layer and used to provide the routing services within an
internetwork.
• The protocols used to route the network traffic are known
as Network layer protocols. Examples of protocols are IP and
Ipv6.
◌ Transport Layer
• The Transport layer is the 4th Layer which ensures that
messages are transmitted in the order in which they are sent
and there is no duplication of data.
• The main responsibility of the transport layer is to transfer
the data completely.
• It receives the data from the upper layer and converts them
into smaller units known as segments.
22
• This layer can be termed as an end-to-end layer as it provides
a point-to-point connection between source and destination
to deliver the data reliably.
23
◌ Session Layer
• It is the 5th Layer in the OSI model.
• The Session layer is used to establish, maintain and
synchronize the interaction between communicating devices.
◌ Presentation Layer
• A Presentation layer is mainly concerned with the syntax
and semantics of the information exchanged between the
two systems.
• It acts as a data translator for a network.
• This layer is a part of the operating system that converts the
data from one presentation format to another format.
• The Presentation layer is also known as the syntax layer.
• It is responsible for encoding, encryption, and compression.
◌ Application Layer
• An application layer serves as a window for users and application
processes to access network service.
• It handles issues such as network transparency, resource allocation,
etc.
• This layer provides the network services to the end-users.
24
○ TCP/IP model:
25
Addressing Types:
There are four levels of addresses in the Internet, using the TCP/
IP protocols: physical address, logical address, port address,
and application-specific address. Each address is related to
one layer in the TCP/IP architecture, as shown in the following
Figure:
Physical Addresses:
The physical address is the address of a node in the network,
it is a -6byte (-48bit) physical address that is imprinted on the
network interface card (NIC). It is written in 12 hexadecimal
digits; every byte (2 hexadecimal digits) is separated by a colon,
as shown below.
26
Logical Addresses:
Port Addresses:
Computers are devices that can run multiple processes at the
same time. Arriving at the host is not the final destination of
data communications on the Internet. The end of Internet
communication is a process communicating with another
process. For these processes to receive data simultaneously, we
need a method to label the different processes. In the TCP/
IP architecture, the label assigned to a process is called a port
address. A port address in TCP/IP is 16 bits in length, represented
by one decimal number as shown.
27
Application-Specific Addresses:
Applications have user-friendly addresses that are designed for
specific applications (for example; [Link]). These
addresses get changed to the corresponding port and logical
addresses by the sending computer.
IP:
An Internet Protocol address that is also known as an IP
address. It is a numerical label. It is assigned to each device
that is connected to a computer network which uses the IP for
communication. Its routing function allows internetworking and
essentially establishes the Internet. Combination of IP and TCP
allows developing a virtual connection between a destination
and a source.
HTTP:
The Hypertext Transfer Protocol is a foundation of the World
Wide Web. It is used for transferring webpages and other such
resources from the HTTP server or web server to the web client
or the HTTP client. Whenever you use a web browser like
Google Chrome or Firefox, you are using a web client. It helps
HTTP to transfer web pages that you request from the remote
servers.
SMTP:
SMTP stands for Simple Mail Transfer Protocol. This protocol
supports the e-mail and helps you to send the data to another
e-mail address.
28
SNMP:
SNMP stands for Simple Network Management Protocol. It is
a framework which is used for managing the devices on the
internet by using the TCP/IP protocol.
DNS:
DNS stands for Domain Name System. It associates the
Application-Specific Addresses and logical addresses.
ARP:
ARP stands for Address Resolution Protocol. It is a communication
protocol used for discovering the link layer address, such as a
MAC address, associated with a given internet layer address,
typically an IPv4 address.
TELNET:
TELNET stands for Terminal Network. It establishes the
connection between the local and the remote computer. It
establishes connection in such a manner that you can simulate
your local system at the remote system.
FTP :
FTP stands for File Transfer Protocol. It is mostly used as the
standard protocol for transmitting files from one machine to
another.
29
ALGORITHM
2
C omputer programs in order to be executed by computers,
algorithms need to be in the form of a ‘program’. A
program is written in a programming language, and the
activity of expressing an algorithm as a program is called
programming.
In algorithms, steps are expressed in the form of an
instruction or statement. As a consequence, a computer
program comprises a series of statements which indicate to
the computer which operation to perform.
The programming language used will dictate the nature of the
statements in a program.
An algorithm is a sequence of steps for solving a specific
problem given its input data and the expected output data.
30
ALGORITHM ANALYSIS
What Is Algorithm Analysis?
It is very common for beginning computer science students
to compare their programs with one another. You may also
have noticed that it is common for computer programs to look
very similar, especially the simple ones. An interesting question
often arises. When two programs solve the same problem but
look different, is one program better than the other?
In order to answer this question, we need to remember that there
is an important difference between a program and the underlying
algorithm that the program is representing. An algorithm is a
generic, step-by-step list of instructions for solving a problem.
It is a method for solving any instance of the problem such that
given a particular input, the algorithm produces the desired
result. A program, on the other hand, is an algorithm that has
been encoded into some programming language. There may
be many programs for the same algorithm, depending on the
programmer and the programming language being used.
To explore this difference further, consider the function shown
below. This function solves a familiar problem, computing the
sum of the first 𝑛 integers. The algorithm uses the idea of an
accumulator variable that is initialized to 0. The solution then
iterates through the 𝑛 integers, adding each to the accumulator.
def sum_of_n(n):
the_sum = 0
for i in range(1,n1+):
the_sum = the_sum + i
return the_sum
print(sum_of_n(10))
31
Big-O Notation
When trying to characterize an algorithm’s efficiency in terms
of execution time, independent of any particular program or
computer, it is important to quantify the number of operations
or steps that the algorithm will require. If each of these steps is
considered to be a basic unit of computation, then the execution
time for an algorithm can be expressed as the number of steps
required to solve the problem. Deciding on an appropriate basic
unit of computation can be a complicated problem and will
depend on how the algorithm is implemented.
Algorithm Design:
• Comprises a set of instructions for completing a task.
• Moves the problem from the modelling stage to the operation
stage.
• The set of instructions should be sequential, complete,
accurate and have a clear end point.
• If intended for a computer the algorithm must be comprised
a series of tasks written in a way that the computer is able to
perform.
• Algorithms are executed by human beings or computers.
An example software for executing algorithms is RAPTOR,
which is available on our cs servers through NoMachine
connection.
• When it executed by people, an algorithm needs to be
presented at their level of understanding and in a language
they understand.
• When it executed by machine (computer), an algorithm also
needs to be presented at its level of understanding and in a
language it understands
32
Typical steps in the development of algorithms:
1. Problem definition.
2. Development of a model.
3. Specification of the algorithm.
4. Designing an algorithm.
5. Checking the correctness of the algorithm.
6. Analysis of algorithm.
7. Implementation of algorithm.
8. Program testing.
9. Documentation preparation.
33
inconsistencies relies on knowledge of the objects being referred
to and in particular on knowledge of the attributes of those
objects, and of the relationships between them. Consider for
example (Goldschlager and Lister, 1988) a computer processor
faced with the following command:
write down the name of the 13th month of the year
If the processor knows that there are only 12 months in the year
it can detect the semantic inconsistency in the command before
trying to execute it. If it does not know this, then it will attempt
to execute it and most likely an exception will be raised.
34
The conclusion is that the designer of an algorithm should
ensure the algorithm describes precisely the process that needs
to be carried out while all possible circumstances have been
accounted for. If the process to be carried out is too complex
then the designer’s task is difficult.
This is why a methodical approach is needed. One such approach
is the stepwise refinement (or top-down design).
Stepwise Refinement is a variation of the divide and conquer
where the process to be carried out are broken down into a
number of steps, each of which can be described by an algorithm
which is smaller and simpler; because each such sub-algorithm is
simpler than the entire process, the designer usually has a clearer
idea of how to efficiently construct it, and can therefore sketch it
in more details than if he tried to handle the whole algorithm at
once. The sub-algorithms can themselves be broken into smaller
pieces which are even simpler and can again be expressed in
even more detail and precision. Refinement of the algorithm
continues this way until each of its steps is sufficiently detailed
and precise to allow execution by the computer processor.
35
Sequence:
(A series of steps that are carried out sequentially in the order in
which they are written. Each step is carried out only once)
Selection:
(One of two or more alternatives should be chosen.)
A more advanced structure which provides flexibility is the
selection.
The condition can be used to specify any kind of circumstance
which when true needs the execution of a certain step, off
course, in real life there are alternatives in case a particular
circumstance emerges, to cope with such situations, the selection
structure can be extended so as to provide alternative steps to
be executed.
36
Assume a simple algorithm for driving with a car to work which
needs to cater for the occasion that the car needs fuel:
(1) start car
(1.1) if fuel indicator on
then drive to the nearest gas station
else drive to work
Iteration:
(Part of the algorithm should be capable for repetition, either a
defined number of times or until a certain condition has been met.)
37
Recursion:
Recursion is a powerful tool based on which the algorithm can
be expressed in terms of itself. It provides a simple, powerful
way of approaching a variety of problems. It is often hard to
think about how a problem can be approached recursively. It is
also very easy to write a recursive algorithm that either takes
too long to run or does not properly terminate.
In algorithmic design, an algorithm is said to be recursive if it
calls itself. Obviously when dealing with an algorithm which
calls itself there is a challenge in ensuring that the algorithm
will eventually terminate producing the correct result. The
circularity of recursive algorithms is avoided by ensuring that
each time the input to the successive execution is decreased by
some number so that at some point it will eventually become
zero and the algorithm will terminate.
To implement a recursive algorithm, the problem must satisfy
the following conditions:
• It can be broken down into a simpler version of the same
problem.
• It has one or more base cases whose values are known.
Here is a real-world example of recursion: Consider you are
seated in the last row of a cinema and you want to count the
number of rows. You ask the person seated in front of you to
tell you how many rows are there in front of him. This person
does the same thing and asks the person who is seated in front
of him and so on till the person who is seated first row is asked
the question. This person can answer zero to the person behind
him because he can see that there are no more rows in front of
him. This is the base case. The person in the second row adds 1
to the answer and tells it to the person behind him in the third
row and so on until the answer reaches you. Notice that at each
38
step the problem is reduced to a simpler version of the same
problem.
As it turns out, for any algorithm which uses recursion there can
be an equivalent algorithm which uses iteration. So, recursion
can be also seen as a different form of iteration. Nevertheless, a
recursive algorithm for describing a particular process is often
far more concise than an iterative one.
39
1. Stacks
What is a Stack?
A stack (sometimes called a “push-down stack”) is an ordered
collection of items where the addition of new items and the
removal of existing items always takes place at the same
end. This end is commonly referred to as the “top.” The end
opposite the top is known as the “base.” The base of the stack
is significant since items stored in the stack that are closer to
the base represent those that have been in the stack the longest.
The most recently added item is the one that is in position to
be removed first. This ordering principle is sometimes called
LIFO, last-in first-out. It provides an ordering based on length
of time in the collection. Newer items are near the top, while
older items are near the base.
Many examples of stacks occur in everyday situations. Almost
any cafeteria has a stack of trays or plates where you take the
one at the top, uncovering a new tray or plate for the next
customer in line. Imagine a stack of books on a desk. The only
book whose cover is visible is the one on top. To access others
in the stack, we need to remove the ones that are sitting on top
of them.
40
One of the most useful ideas related to stacks comes from the
simple observation of items as they are added and then removed.
Assume you start out with a clean desktop. Now place books
one at a time on top of each other. You are constructing a stack.
Consider what happens when you begin removing books. The
order that they are removed is exactly the reverse of the order
that they were placed. Stacks are fundamentally important, as
they can be used to reverse the order of items. The order of
insertion is the reverse of the order of removal.
2. Queues
What Is a Queue?
A queue is an ordered collection of items where the addition
of new items happens at one end, called the “rear,” and the
removal of existing items occurs at the other end, commonly
called the “front.” As an element enters the queue it starts at
the rear and makes its way toward the front, waiting until that
time when it is the next element to be removed.
The most recently added item in the queue must wait at the
end of the collection. The item that has been in the collection
the longest is at the front. This ordering principle is sometimes
called FIFO, first-in first-out. It is also known as “first-come
first-served”.
41
The simplest example of a queue is the typical line that we all
participate in from time to time. We wait in a line for a movie,
we wait in the check-out line at a grocery store, and we wait
in the cafeteria line (so that we can pop the tray stack). Well-
behaved lines, or queues, are very restrictive in that they have
only one way in and only one way out. There is no jumping in
the middle and no leaving before you have waited the necessary
amount of time to get to the front.
Computer science also has common examples of queues. Our
computer laboratory has 30 computers networked with a single
printer. When students want to print, their print tasks “get in
line” with all the other printing tasks that are waiting. The first
task in is the next to be completed. If you are last in line, you
must wait for all the other tasks to print ahead of you. We will
explore this interesting example in more detail later.
In addition to printing queues, operating systems use a number
of different queues to control processes within a computer.
The scheduling of what gets done next is typically based on a
queuing algorithm that tries to execute programs as quickly as
possible and serve as many users as it can. Also, as we type,
sometimes keystrokes get ahead of the characters that appear
on the screen. This is due to the computer doing other work at
that moment. The keystrokes are being placed in a queue-like
buffer so that they can eventually be displayed on the screen in
the proper order.
42
3. Deques
What Is a Deque?
A deque, also known as a double-ended queue, is an ordered
collection of items similar to the queue. It has two ends, a front
and a rear, and the items remain positioned in the collection.
What makes a deque different is the unrestrictive nature of
adding and removing items. New items can be added at either
the front or the rear. Likewise, existing items can be removed
from either end. In a sense, this hybrid linear structure provides
all the capabilities of stacks and queues in a single data structure.
It is important to note that even though the deque can assume
many of the characteristics of stacks and queues, it does not
require the LIFO and FIFO orderings that are enforced by those
data structures. It is up to you to make consistent use of the
addition and removal operations.
4. Lists
A list is a collection of items where each item holds a relative
position with respect to the others. More specifically, we will
refer to this type of list as an unordered list. We can consider
the list as having a first item, a second item, a third item, and
so on. We can also refer to the beginning of the list (the first
item) or the end of the list (the last item). For simplicity we will
assume that lists cannot contain duplicate items.
For example, the collection of integers 77 ,17 ,93 ,26 ,54, and
31 might represent a simple unordered list of exam scores.
Note that we have written them as comma-delimited values, a
common way of showing the list structure.
43
Basic Mathematical
3
Skills For Programmers
1. INTRODUCTION
P rogramming learning is well-known as a difficult task for
many students. Several authors have discussed possible
causes for this problem, but we think that a main factor is
the lack of problem-solving abilities that many students show,
namely those problems that require mathematical and logical
knowledge.
2. STANDARDS
In this section we will be covering mathematical standards that
may have significant influence on programming understanding.
44
2.2 Mathematics as a way of communication
This standard indicates that the Mathematics curriculum should
allow students to exercise communication skills, because in
that way, they hopefully will acquire the ability to interpret and
to evaluate mathematical ideas. It is very important to give
students opportunities to bright and clarify their thinking about
mathematical ideas. One of the obstacles they frequently face
when solving a programming problem lies in transforming a
textual solution into mathematical language.
45
2.5 Numerical systems and number theory
The number theory offers many possibilities for interesting
explorations that may have positive results on students’ problem-
solving ability and also on development of other mathematical
concepts. Many problems have to do with number theory,
with frequent applications in programming, such as abundant
numbers, deficient numbers, perfect numbers, triangular
numbers, squares, cubes, palindromes, factorials, Fibonacci
numbers, greatest common divider (GCD) of two numbers, ...etc.
46
• Linear algebra: It is the branch of mathematics concerning
linear equations such as
47
• Convex optimization:It is a subfield of mathematical
optimization that studies the problem of minimizing convex
functions over convex sets. Many classes of convex optimization
problems are considered polynomial-time algorithms whereas
mathematical optimization is in general [Link].
4. CONCLUSION
Learning higher math, for most programmers, is important
simply because it bends your brain to think logically, in a step-
by-step manner to get from one stage to another.
Mathematics will impart a student with the art of reading,
understanding and analyzing a problem before coming up with a
solution. All these skills are vital when it comes to programming
and computer science in general.
48
4
SDLC
What is SDLC
S DLC stands for SOFTWARE DEVELOPMENT LIFE CYCLE
which is a systematic process for building software that
ensures the quality and validity of the software built.
SDLC process aims to produce high-quality software that meets
customer expectations.
The system development should be complete in the pre-defined
time frame and cost.
SDLC consists of a detailed plan which explains how to plan,
build, and maintain a specific software.
Every Stage of the SDLC life has its own process and deliverables
that feed into the next Stage.
SDLC Stages
The SDLC contains 7 Stages which are:
49
Stage 1: Planning and Requirement Analysis
Requirement analysis is the most important and fundamental
stage in SDLC. It is performed by the senior members of the
team with inputs from the customer, the sales department,
market surveys and domain experts in the industry.
This information is used to plan the basic project approach
and to conduct product feasibility study in the economical,
operational and technical areas.
Planning for the quality assurance requirements and identification
of the risks associated with the project is also done in the
planning stage. The outcome of the technical feasibility study is
to define the various technical approaches that can be followed
to implement the project successfully with minimum risks.
50
Stage 3: Designing the Product Architecture
This often is called the design Stage of the SDLC. The Software
Requirement Specification document plays a key role as a
reference for product architects to design a comprehensive
product architecture. Based on requirements detailed, product
architects may present multiple alternative architectures and
codify this in a design specification. A thoroughly designed
approach has to define all the architectural modules of the product
along with its communication and data flow representation with
external third party software modules if used.
Once again, all stakeholders have inputs to this, so that product
reliability, modular design for ease of maintenance and estimated
costs and timeframes are all considered to achieve that the best
design is ultimately selected for building the product during the
product development lifecycle.
There are many different names for the document that specifies
the product architecture during the software lifecycle including
the Design Document Specification.
51
Kotlin, Flutter, JavaScript, HTML, CSS, PHP etc. are used for
coding. The programming language is chosen with respect to
the type of software being developed.
52
Stage 7: Maintenance
The maintenance Stage of the SDLC occurs after the product is
in full operation.
Maintenance of software can include software upgrades, repairs,
and fixes of the software if it breaks.
Software applications often need to be upgraded or integrated
with new systems the customer deploys. It is often necessary to
provide additional testing of the software or version upgrades.
During the Maintenance stage, errors or defects may exist,
which would require repairs during additional testing of the
software. Monitoring the performance of the software is also
included during the maintenance Stage.
53
Incremental Approach:
The incremental model is not a separate model.
It is essentially a series of waterfall cycles. The requirements are
divided into groups at the start of the project.
For each group, the SDLC model is followed to develop software.
The SDLC process is repeated, with each release adding more
functionality until all requirements are met. In this method,
every cycle act as the maintenance stage for the previous
software release. Modification to the incremental model allows
development cycles to overlap.
After that subsequent cycle may begin before the previous cycle
is complete.
V-Model:
In this type of SDLC model testing and the development, the
stage is planned in parallel. So, there are verification stages on
the side and the validation stage on the other side. V-Model
joins by coding the stage.
Agile Model:
Agile methodology is a practice which promotes continuous
interaction of development and testing during the SDLC process
of any project.
In the Agile method, the entire project is divided into small
incremental builds. All of these builds are provided in iterations,
and each iteration lasts from one to three weeks.
54
Spiral Model:
The spiral model is a risk-driven process model.
This SDLC model helps the team to adopt elements of one or
more process models like a waterfall, incremental, waterfall, etc.
This model adopts the best features of the prototyping model and
the waterfall model, the spiral methodology is a combination of
rapid prototyping and concurrency in design and development
activities.
SDLC Example:
In this section we are going to give an example, which will help
to demonstrate SDLC. Let’s say you want to build an online
store, and now let’s start using the SDLC steps:
55
• Defining Requirements: In this Stage the product or
the project requirements should be clearly defined and
documented.
56
• Deployment in the Market and Installation: In this
Stage the store will be published Online and actually start
working, and we start taking Feedback.
Conclusion:
In the end, we can see that using one of SDLC models will
ensure everything is clearly specified, the business owner will
have a clear idea of what will happen and what is expected
from the software, and developers will have a more organized
work.
SDLC is a great tool to provide an easy way to achieve goals
in a comfortable way.
57
Clean Code
5
What is Clean Code?
T he commonality between 3 camps ( Java, C++, C#) is that
they are all the preferred programming languages, and this
enables them to write Clean Code!
That can only leave one to assume that Clean Code, is just
another highly subjective issue. It also means something entirely
different, depending on where in the Software Development
chain you sit.
Over the years, programmers have come to conclude that there
are many definitions of clean code that they seem to agree on.
The most popular definition of a clean code is a code that
is easy to understand and easy to change. On the face of it,
this may get heads nodding, but ultimately, it is one of those
definitions that states something without really stating anything
at all.
58
We could certainly say that the code follows some criteria of
what makes a code easy to understand:
• Easy to understand the execution flow of the entire application.
• Easy to understand how different objects collaborate with each
other.
• Easy to understand the role and responsibility of each class.
• Easy to understand what each method does.
• Easy to understand what is the purpose of each expression
and variable.
The code is easy to extend and refactor, and it’s easy to fix bugs
in the codebase. This can be achieved if the person making
the changes understands the code and also feels confident that
the changes introduced in the code do not break any existing
functionality.
59
The above code, fits all of the criteria. We could consider this
to be Clean Code, but is it really?
During programming career, we have seen many interpretations
of the exact same code, in hundreds of applications. Even in
what some would consider and even sold scalable enterprise
software. In fact, we would place odds on the fact that if you
open mostly any software application you’ll probably find
similar examples.
60
1. KISS: Keep It Simple Stupid. A design principle originating
from the U.S. Navy that goes back to 1960 already. It states that
most systems should be kept as simple as possible (but not
simpler, as Einstein would have said). Unnecessary complexity
should be avoided. The question to ask when you›re writing
code is «can this be written in a simpler way?»
61
5. Favor readability: It›s not because a machine can read
your code that another human can. Particularly when working
with multiple people on a project, always favor readability over
conciseness. There›s no point in having concise code if people
don›t understand it.
At the end:
Writing Computer software is one of the purest creative
activities in the history of the human race. Programmers aren’t
bound by practical limitations such as the laws of physics; we
can create exciting virtual worlds with behaviors that could
never exist in the real world. Programming doesn’t require
great physical skill or coordination like Ballet or Football.
All programming requires is a creative mind and the ability
to organize your thoughts . If you can visualize a system, you
can probably implement it in a computer program
62
Database (DB)
6
Before we learn about database, let›s understand some
basic information.
What is Data?
I n simple words, data can be facts related to any object in
consideration. For example your name, age, height, weight,
etc. are some data related to you.
A picture, image, file, pdf etc. can also be considered data.
What is a Database?
D atabase is a systematic collection of data. Databases support
storage and manipulation of data. Databases make data
management easy. Let›s discuss few examples:
An online telephone directory would definitely use database to
store data pertaining to people, phone numbers, other contact
details, etc.
Your electricity service provider is obviously using a database
to manage billing, client related issues, to handle fault data, etc.
Let›s also consider Facebook. It needs to store, manipulate,
and present data related to members, their friends, member
activities, messages, advertisements, and lot more.
63
What is a Database Management System
(DBMS)?
Database Management System (DBMS) is a collection of
programs which enables its users to access database, manipulate
data, do reporting / representation of data.
It also helps to control access to the database.
Database Management Systems are not a new concept and as
such had been first implemented in 1960s.
Charles Bachmen›s Integrated Data Store (IDS) is said to be the
first DBMS in history.
With time, database technologies evolved a lot while usage
and expected functionalities of databases have been increased
immensely.
Types of DBMS
Let›s see how the DBMS family got evolved with the time.
Following diagram shows the evolution of DBMS categories.
There are 4 major types of DBMS. Let›s look into them in detail.
• Hierarchical - this type of DBMS employs the «parent-child»
relationship of storing data. This type of DBMS is rarely used
nowadays. Its structure is like a tree with nodes representing
records and branches representing fields. The windows registry
used in Windows XP is an example of a hierarchical database.
Configuration settings are stored as tree structures with nodes.
64
• Network DBMS - this type of DBMS supports many-to-many
relationships. This usually results in complex database structures.
RDM Server is an example of a database management system
that implements the network model.
65
What is SQL?
SQL stands for Structured Query language, pronounced as
«S-Q-L» or sometimes as «See-Quel». SQL is the standard
language for dealing with Relational Databases. SQL can be
used to insert, search, update, and delete database records.
SQL can do lots of other operations including optimizing and
maintenance of databases. Relational databases like MySQL
Database, Oracle, Ms SQL server, Sybase, etc. uses SQL.
66
What is NoSQL ?
NoSQL is an upcoming category of Database Management
Systems. Its main characteristic is its non-adherence to Relational
Database Concepts. NoSQL means «Not only SQL».
Concept of NoSQL databases grew with internet giants such as
Google, Facebook, Amazon etc. who deal with gigantic volumes
of data.
When you use relational database for massive volumes of data,
the system starts getting slow in terms of response time.
To overcome this, we could of course «scale up» our systems by
upgrading our existing hardware.
The alternative to the above problem would be to distribute our
database load on multiple hosts as the load increases.
This is known as «scaling out».
NoSQL database are non-relational databases that scale out
better than relational databases and are designed with web
applications in mind.
They do not use SQL to query the data and do not follow strict
schemas like relational models. With NoSQL, ACID (Atomicity,
Consistency, Isolation, Durability) features are not guaranteed
always.
67
Why it makes sense to learn SQL after
NoSQL ?
With the advantages of NoSQL databases outlined above that
scale out better than relational models, you might be thinking
why one would still want to learn about SQL database?
Well, NoSQL databases are sort of highly specialized systems
and have their special usage and limitations. NoSQL suit more
for those who handles huge volumes of data. The vast majority,
use relational databases and associated tools.
Relational databases have the following advantages over NoSQL
databases;
68
What is SQL?
• SQL stands for Structured Query Language
• SQL lets you access and manipulate databases
• SQL became a standard of the American National Standards
Institute (ANSI) in 1986, and of the International Organization
for Standardization (ISO) in 1987.
69
Using SQL in Your Web Site•
To build a web site that shows data from a database, you will
need:
• An RDBMS database program (i.e. MS Access, SQL Server,
MySQL)
• To use a server-side scripting language, like PHP or ASP
• To use SQL to get the data you want
• To use HTML / CSS to style the page
RDBMS
RDBMS stands for Relational Database Management System.
RDBMS is the basis for SQL, and for all modern database
systems such as MS SQL Server, IBM DB2, Oracle, MySQL,
and Microsoft Access.
The data in RDBMS is stored in database objects called tables.
A table is a collection of related data entries and it consists of
columns and rows.
Every table is broken up into smaller entities called fields. For
example: the fields in the Customers table consist of CustomerID,
CustomerName, ContactName, Address, City, PostalCode, and
Country. A field is a column in a table that is designed to
maintain specific information about every record in the table.
A record, also called a row, is each individual entry that exists
in a table. For example, there are 91 records in the Customers
table below. A record is a horizontal entity in a table.
A column is a vertical entity in a table that contains all
information associated with a specific field in a table.
70
Database Tables
A database most often contains one or more tables. Each table
is identified by a name (e.g. «Customers» or «Orders»). Tables
contain records (rows) with data.
Below is a selection from the «Customers» table:
The table above contains five records (one for each customer) and
seven columns (CustomerID, CustomerName, ContactName,
Address, City, PostalCode, and Country).
71
SQL Statements
Most of the actions you need to perform on a database are
done with SQL statements.
The following SQL statement selects all the records in the
«Customers» table:
Example
SELECT * FROM Customers;
72
• SQL CREATE DATABASE Statement
The CREATE DATABASE statement is used to create a new
SQL database.
Syntax
CREATE DATABASE databaseName;
74
SQL Constraints
SQL constraints are used to specify rules for data in a table.
Constraints are used to limit the type of data that can go into
a table. This ensures the accuracy and reliability of the data in
the table. If there is any violation between the constraint and
the data action, the action is aborted.
Constraints can be column level or table level. Column level
constraints apply to a column, and table level constraints apply
to the whole table.
The following constraints are commonly used in SQL:
75
• FOREIGN KEY - Uniquely identifies a row/record in
another table.
• CHECK - Ensures that all values in a column satisfies a
specific condition.
• DEFAULT - Sets a default value for a column when no
value is specified.
• INDEX - Used to create and retrieve data from the database
very quickly
76
• The SQL WHERE Clause
The WHERE clause is used to filter records.
The WHERE clause is used to extract only those records that
fulfill a specified condition.
WHERE Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Note: The WHERE clause is not only used in SELECT
statement, it is also used in UPDATE, DELETE statement,
etc.!
The WHERE clause can be combined with AND, OR, and NOT
operators.
The AND and OR operators are used to filter records based on
more than one condition:
• The AND operator displays a record if all the conditions
separated by AND are TRUE.
• The OR operator displays a record if any of the conditions
separated by OR is TRUE.
The NOT operator displays a record if the condition(s) is NOT
TRUE.
A. AND Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
77
B. OR Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
C. NOT Syntax
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
78
However, make sure the order of the values is in the same order
as the columns in the table. The INSERT INTO syntax would
be as follows:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
79
• SQL UPDATE Statement
The UPDATE statement is used to modify the existing records
in a table.
UPDATE Syntax
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Note: Be careful when updating records in a table! Notice the
WHERE clause in the UPDATE statement. The WHERE
clause specifies which record(s) that should be updated. If you
omit the WHERE clause, all records in the table will be
updated!
80
• SQL MIN() and MAX() Functions
The MIN() function returns the smallest value of the selected
column.
The MAX() function returns the largest value of the selected
column.
1. MIN() Syntax
SELECT MIN(column_name)
FROM table_name
WHERE condition;
2. MAX() Syntax
SELECT MAX(column_name)
FROM table_name
WHERE condition;
81
• SQL LIKE Operator
The LIKE operator is used in a WHERE clause to search for a
specified pattern in a column.
There are two wildcards often used in conjunction with the
LIKE operator:
• % - The percent sign represents zero, one, or multiple
characters
• _ - The underscore represents a single character
Note: MS Access uses an asterisk (*) instead of the percent sign
(%), and a question mark (?) instead of the underscore (_).
The percent sign and the underscore can also be used in
combinations!
LIKE Syntax
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
Tip: You can also combine any number of conditions using
AND or OR operators.
Here are some examples showing different LIKE operators
with ‹%› and ‹_› wildcards:
82
WHERE CustomerName Finds any values that start
LIKE ‹a__%› with «a» and are at least 3
characters in length
WHERE ContactName LIKE Finds any values that start
‹a%o› with «a» and ends with «o»
83
2. Wildcard Characters in SQL Server:
Sym-
Description Example
bol
Represents zero or more bl% finds bl, black,
%
characters blue, and blob
h_t finds hot, hat, and
_ Represents a single character
hit
Represents any single char- h[oa]t finds hot and
[]
acter within the brackets hat, but not hit
Represents any character not h[^oa]t finds hit, but
^
in the brackets not hot and hat
Represents a range of char- c[a-b]t finds cat and
-
acters cbt
All the wildcards can also be used in combinations.
Here are some examples showing different LIKE operators
with ‘%’ and ‘_’ wildcards:
LIKE Operator Description
WHERE CustomerName Finds any values that starts with
LIKE ‘a%’ “a”
WHERE CustomerName Finds any values that ends with
LIKE ‘%a’ “a”
WHERE CustomerName Finds any values that have “or” in
LIKE ‘%or%’ any position
WHERE CustomerName Finds any values that have “r” in
LIKE ‘_r%’ the second position
Finds any values that starts with
WHERE CustomerName
“a” and are at least 3 characters
LIKE ‘a_%_%’
in length
WHERE ContactName Finds any values that starts with
LIKE ‘a%o’ “a” and ends with “o”
84
• SQL IN Operator
The IN operator allows you to specify multiple values in a
WHERE clause.
The IN operator is a shorthand for multiple OR conditions.
IN Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
Or :
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
• SQL JOIN
A JOIN clause is used to combine rows from two or more ta-
bles, based on a related column between them.
85
Let’s look at a selection from the “Orders” table:
OrderID CustomerID OrderDate
10308 2 1996-09-18
10309 37 1996-09-19
10310 77 1996-09-20
Then, look at a selection from the “Customers” table:
Customer Contact
CustomerName Country
ID Name
1 Alfreds Futterkiste Maria Anders Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Mexico
3 Antonio Moreno Taquería Antonio Moreno Mexico
Notice that the “CustomerID” column in the “Orders” table
refers to the “CustomerID” in the “Customers” table. The re-
lationship between the two tables above is the “CustomerID”
column.
Then, we can create the following SQL statement (that con-
tains an INNER JOIN), that selects records that have matching
values in both tables:
Example
SELECT [Link], [Link], Orders.
OrderDate
FROM Orders
INNER JOIN Customers ON [Link]=[Link]-
merID;
86
and it will produce something like this:
OrderID CustomerName OrderDate
10308 Ana Trujillo Emparedados y helados 9/18/1996
10365 Antonio Moreno Taquería 11/27/1996
10383 Around the Horn 12/16/1996
10355 Around the Horn 11/15/1996
10278 Berglunds snabbköp 8/12/1996
87
1. SQL INNER JOIN Keyword
The INNER JOIN keyword selects records that have matching
values in both tables.
INNER JOIN Syntax
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
The LEFT JOIN keyword returns all records from the left table
(table1), and the matched records from the right table (table2).
The result is NULL from the right side, if there is no match.
LEFT JOIN Syntax
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
88
3. SQL RIGHT JOIN Keyword
The RIGHT JOIN keyword returns all records from the right
table (table2), and the matched records from the left table (ta-
ble1). The result is NULL from the left side, when there is no
match.
RIGHT JOIN Syntax
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
89
FULL OUTER JOIN Syntax
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
90
Basic of testing
7
Software Testing-Overview
91
Different companies have different designations for people who
test the software on the basis of their experience and knowledge
such as Software Tester, Software Quality Assurance Engineer,
QA Analyst, etc.
It is not possible to test the software at any time during its cycle.
The next two sections state when testing should be started and
when to end it during Software Development Life Cycle (SDLC).
92
● Testing Deadlines
● Completion of test case execution
● Completion of functional and code coverage to a certain
point
● Bug rate falls below a certain level and no high-priority
bugs are identified
● Management decision
93
Types of Software Testing
Manual Testing:
Manual testing is the process of testing the software manually
to find the defects. Tester should have the perspective of an end
user and to ensure all the features are working as mentioned in
the requirement document. In this process, testers execute the
test cases and generate the reports manually without using any
automation tools.
Automation testing:
Automation Testing is the process of testing the software using
an automation tools to find the defects. In this process, testers
execute the test scripts and generate the test results automati-
cally by using automation tools. Some of the famous automation
testing tools for functional testing are QTP/UFT and Selenium.
Unit Testing:
Unit Testing is the testing of an individual unit or group of
related units. It falls under the class of White-Box Testing. It
is often done by the programmer, who tests that the unit he/
she has implemented is producing the expected output against
given input.
94
Integration Testing:
Integration Testing is testing in which a group of components
are combined to produce output. Also, the interaction between
software and hardware is tested in integration testing if soft-
ware and hardware components have any relation. It may fall
under both White-Box Testing and Black-Box Testing.
Functional Testing:
Functional testing is the testing to ensure that the specified
functionality required in the system requirements works. It falls
under the class of Black-Box Testing.
System Testing:
System Testing is the testing to ensure that by putting the soft-
ware in different environments (e.g., Operating Systems) it still
works. System testing is done with full system implementation
and environment. It falls under the class of Black-Box Testing.
Stress Testing:
Stress Testing is the testing to evaluate how system behaves un-
der unfavorable conditions. It is conducted at beyond limits of
the specifications. It falls under the class of Black-Box Testing.
Performance Testing:
Performance Testing is the testing to assess the speed and effec-
tiveness of the system and to make sure it is generating results
within a specified time as in performance requirements. It falls
under the class of Black-Box Testing.
95
Usability Testing:
Usability Testing is performed to the perspective of the client,
to evaluate how the GUI is user-friendly? How easily can the
client learn? After learning how to use, how proficiently can the
client perform? How pleasing is it to use its design? This falls
under the class of Black-Box Testing.
Acceptance Testing:
Acceptance Testing is often done by the customer to ensure that
the delivered product meets the requirements and works as the
customer expected. It falls under the class of Black-Box Testing.
Regression Testing:
Regression Testing is the testing after modification of a system,
component, or a group of related units to ensure that the mod-
ification is working correctly and is not damaging or imposing
other modules to produce unexpected results. It falls under the
class of Black-Box Testing.
Beta Testing:
Beta Testing is the testing which is done by end users, a team
outside development, or publicly releasing full pre-version of
the product which is known as beta version. The aim of beta
testing is to cover unexpected errors. It falls under the class of
Black-Box Testing.
96
Difference Between Defect, Error, Bug, Failure,
And Fault
Defect in Manual Testing
A defect is an anomaly which causes a deviation between the
expected and actual results. It could be an error discovered
once the application got deployed into production. Some soft-
ware could show potential issues with both the internal and
external features. Hence, any variance in the behavior of the
functionalities of a product or software got to be a defect in
manual testing
1. Wrong
Wrong indicates the incorrect implementation of the customer
requirements. A manual tester will record it as a defect because
of the deviation from the given specification.
2. Miss
Miss shows that one or more customer requirements got missed
in the implementation. It is also a deviation from the original
specifications. The tester would also log it as a defect too.
97
3. Error
An error could arise because of a coding mistake by the de-
veloper, he misunderstood, or the requirement was not clear
enough. For example, a developer may misinterpret a design
flow, or he might use an incompatible data type which results
in an Error. Some actions like insufficient array limit, loop get-
ting into the infinite loop or invalid syntax cause to errors. If a
tester catches any of these, then he or she will log a defect for
the same.
4. Bug
A bug occurs because of some coding error and leads a pro-
gram to malfunction. It may also lead to a functional issue in
the product. These are fatal errors that could block a function-
ality, results in a crash, or cause performance bottlenecks. Such
errors got treated as Bugs in manual testing.
5. Failure
A failure indicates a fatal issue in software or in its module
which is making the system inoperative or unresponsive. Such
an error in the software which the end customer reports are a
Failure. The manual testers also discover many failures during
the development cycle.
6. Fault
A fault makes an application behave in a wrong manner. The
problems like an invalid step, lack of resources or inappropriate
data definition could cause a fault in a program. It may happen
in software because the developer has not added the code for
fault tolerance.
98
Documentation of Software Testing
Testing documentation involves the documentation of artifacts
that should be developed before or during the testing of Soft-
ware.
Documentation for software testing helps in estimating the test-
ing effort required, test coverage, requirement tracking/tracing,
etc. This section describes some of the commonly used docu-
mented artifacts related to software testing such as:
● Test Plan
● Test Scenario
● Test Case
● Traceability Matrix
Test Plan
It outlines the strategy that will be used to test an application,
the resources that will be used, the test environment in which
testing will be performed, and the limitations of the testing and
the schedule of testing activities. Typically the Quality Assur-
ance Team Lead will be responsible for writing a Test Plan.
Test Scenario
It is a one line statement that notifies what area in the appli-
cation will be tested. Test scenarios are used to ensure that all
process flows are tested from end to end. A particular area of
an application can have as little as one test scenario to a few
hundred scenarios depending on the magnitude and complexi-
ty of the application.
The terms ‘Test Scenario’ and ‘Test Cases’ are used interchange-
99
ably, however a test scenario has several steps, whereas a test
case has a single step. Viewed from this perspective, test sce-
narios are test cases, but they include several test cases and the
sequence that they should be executed. Apart from this, each
test is dependent on the output from the previous test.
Test Case
It involves a set of steps, conditions, and inputs that
can be used while performing testing tasks. The
main intent of this activity is to ensure whether a
software passes or fails in terms of its functional-
ity and other aspects. There are many types of test
cases such as functional, negative, error, logical test
cases, physical test cases, UI test cases, etc.
Traceability Matrix:
Traceability Matrix (also known as Requirement Traceability
Matrix - RTM) is a table that is used to trace the requirements
during SDLC. It can be used for forward tracing (i.e. from Re-
quirements to Design or Coding) or backward (i.e. from Coding
to Requirements). There are many user-defined templates for
RTM.
Each requirement in the RTM document is linked with its as-
sociated test case so that testing can be done as per the men-
tioned requirements. Furthermore, Bug ID is also included and
linked with its associated requirements and test case
100
Why is Software Testing Important?
Software Testing is really required to point out the defects and
errors that were made during the development phases, so Soft-
ware Testing is very important because of the following reasons:
1. It is essential since it makes sure of the Customer’s reliability
and their satisfaction in the application.
2. It is very important to ensure the Quality of the product.
Quality of product delivered to the customers helps in gaining
their confidence.
3. It is necessary in order to provide the facilities to the custom-
ers like the delivery of high-quality product or software appli-
cation which requires lower maintenance cost and hence results
into more accurate, consistent and reliable results.
4. It is required for an effective performance of software appli-
cation or product.
5. It’s important to ensure that the application should not result
into any failures because it can be very expensive in the future
or in the later stages of the development.
6. It is required to stay in the business.
101
Soft
Skills
SELF LEARNING
8
1. Definition
2. What are the advantages of
self-learning?
3. How can we achieve self-learning?
Definition:
103
Advantages of Self-Learning:
[Link] Develop Strong Problem-Solving Skills:
Self-Learning gives you the ability to identify problems and
quickly look for effective solutions on your own. This could
be from colleagues, the internet or by exploration. Whatever
the case, challenges and obstacles do not kill your drive to
get things done, instead of that, they provide you with new
opportunities to learn something new at your own pace and
time. You get to learn how to actively look for solutions in-
stead of having solutions brought to you. Moreover, you can
easily adapt to changes in the environment due to the ability
to learn fast.
104
to employ a certain set of skills in order to learn. Final-
ly, self-learners have a strong commitment to tasks, as they
learn how to stick to a plan until they achieve their goals.
105
6. You Get to Choose Your Mode of Learning:
YouTube Tutorials, Webinars, Books, or any other mode of
learning is at your disposal when you decide to learn. With
all these modes of learning within your reach, you get to
choose one that suits you best and one that you find most
engaging. You don’t have to stick to one mode of learning
just because it is what is available.
106
and whether you have gained any knowledge and this sets the
stage for a fruitful learning process. Additionally, with learning
goals, you can be able to create a systematic learning process
which will enable you to learn the subject matter progressively.
107
Time Management
9
“Either you run the day, or the day runs you.” - Jim Rohn
If you are like me, you might have thought that once you learned
to program, you would have all the skills you need to work as
a programmer. If only that were true. There is one skill that
differentiates those who know how to program and actual pro-
grammers: time management. Between the complexity of pro-
gramming, the need to stay updated on the latest developments,
and the distractions that many freelancers face, a lack of time
management skills can spell disaster for a programmer.
Even if you feel pretty good about your time management skills,
there is always a room for improvement. In fact, the more ef-
ficient you become with how you spend your time, the more
choices you have. You can invest the time you save in taking on
more clients, learning more skills, or (and my favorite) spending
108
more time to spend with your family!
Time Management Skills for Software Developers:
Time management is one of the most critical skills that every
developer should possess. Developing software is still one of the
challenging careers in our time. Software development requires
a lot of developer’s attention. It’s also challenging for develop-
ers that they must const0antly keep themselves updated with
an enormous amount of ever-changing information. There are
many other challenges that contribute to the difficulty of this
profession. How do they cope with them? They just know how to
manage their time. Having made a habit of effective time man-
agement, you’ll be amazed how productive will be your work.
But, as you are juggling all you are already doing, how are you
going to find time to learn time management? This can be tough.
However, with every step you take towards efficiency, you gain
just a little bit more time to invest in improvement. It can have
a snowball effect and before you know it, you will wonder how
you ever accomplished all your work before.
1. Planning:
109
set up benchmarks for completing subtasks, consider ways to
make the work more efficient, and determine the best approach
to the work.
2. Prioritisation:
3. Deadlines:
4. Monitoring.
110
more accurate plans, and also capture any “time leaks”, places
where tasks are consuming far more time than they should.
If you struggle with time management, get some help. The web
is filled with time management courses, apps, and coaching. Just
be careful, while some of these are effective, some may end up
costing you even more time, and possibly money.
111
10
Problem solving skill
I n programming field, we face a lot of problems to solve, and
for a new programmer, it may look really hard and a bit con-
fusing. In this chapter we are going to introduce this skill in an
easy way.
Problem solving Definition:
Problem solving is the act of defining a problem, determining
the cause of the problem, identifying, prioritizing, and selecting
alternatives for a solution, and implementing a solution.
112
2- Generate alternative solutions:
Postpone evaluating alternatives initially, specify short-
term and long-term alternatives, and don’t forget to brain-
storm on colleagues’ ideas if it’s possible, and finally seek
the alternative that may solve the problem.
113
• Work through the problem manually
with at least three sets of data
Take out a piece of paper and work through the problem
manually. Think of at least three sets of sample data you
can use.
• Write pseudocode
Even after you’ve worked out general steps, writing out
pseudocode that you can translate into code will help
with defining the structure of your code and make cod-
ing a lot easier. Write pseudocode line by line. You can
do this either on paper or as comments in your code
editor. Don’t get caught up with the syntax. Focus on the
logic and steps.
114
• Debug
This step really should be throughout the process. De-
bugging throughout will help you catch any syntax er-
rors or gaps in logic sooner rather than later.
• Practice
Even experienced developers are always practicing and
learning. If you get helpful feedback, implement it.
Redo a problem or do similar problems. Keep pushing
yourself. With each problem you solve, a better devel-
oper you become. Celebrate each success and be sure
to remember how far you’ve come. Remember that
programming, like anything, becomes easier with time.
115
Conclusion
Problem solving involves seeking to achieve goals and
overcoming barriers, and for a programmer, it’s a key to
success and develop all the time.
It requires creative thinking and organizing skills, and
needs to be practiced a lot. Therefore, it’s one of the most
important skills a programmer should have in order to be
a productive and successful one.
116
11
Creativity
W e all have 24 hours, but the difference is that some peo-
ple make a big difference in their lives with these hours.
As for the rest of the people, they don’t do anything. We must
know how to use every second of our time to make a difference
and innovate in our field.
What is creativity?
According to the new British Encyclopedia, creativity is the
ability to find something new as a solution to a problem or to
produce a new tool or to achieve it in a new way.1
And more simply, we can say that creativity is a split from the
current reality to create a new reality. This new reality should
be more beneficial as it is a new acceptable production.
118
to do their task, or they logical people. Thus, they are able
to solve many problems and this is one of the most important
characteristics of the creative person.
How to be a creative programmer?
Writing instructions is not programmers’ only role. But they
have to solve the problems in a simple and logical way. Here we
can say that the programmer is an innovator and not an ordi-
nary person. Creativity here focuses on creating programming
instructions that other people can make use of later by turning
these instructions into programs that may solve the problems of
many people, and this is the role of the creative programmer.
We can conclude that the programmers who only want to make
the code work are not actually creating anything new and they
are not of great benefit. They are not creative programmers be-
cause most of people are able to code but the difference is how
you write and the goal of writing it, and this is creativity itself.
Here are some simple logical steps to be a creative program-
mer:
First, Understand the Problem
Programmers make solutions by firstly understanding what is
required. They fix problems rather than complaining about
them. They try to start with what they know, splitting their
problem into smaller subproblems. A partial solution of the
problem may raise ideas about the rest of the task.
Lastly, Be Disciplined
Many of us have an incorrect view that following standards and
conventions inhibit creativity. Nothing can go further than the
truth. Unorganized creativity leads to chaos and most often,
chaos doesn’t bring results.
A disciplined approach allows programmers to set intermedi-
ate goals. They follow their goals step by step until they reach
completion.
Without disciplined standards and agreements, it is almost im-
possible to achieve Big projects. Programmers need these stan-
dards so that they can focus their creative energies and gain
the best results. Jim Ron (an American author) rightly said “We
must all suffer from two things; the pain of discipline, and the
pain of regret or disappointment.”
Finally, we will talk about some creative people who had a great
impact, and were able to employ their creativity to serve and
improve the World; Bill Gates, and Steve Jobs, who were able to
make a revolution in the world of technology and communica-
tions.
A lot of people know Apple and Microsoft, so we will get to
know Steve Jobs; founder of Apple, and Bill Gates; founder of
Microsoft.
120
Let’s see the difference between Steve Jobs and Bill Gates influ-
ence on the World.
BILL GATES is a programming genius.
If you are a developer of applications and programs who charge
a fee for this work, the credit for this is for one person, this per-
son who has successfully changed the look of computers and
their operating systems. Bill Gates, founder of Microsoft Cor-
poration, who was able to really make a big difference in the
world, especially in the field of technology and programming,
through his great contribution in the computer world, especially
in the Windows system, and working to develop it permanently
in line with the major developments in the world. We can say
that failure is the basis of creativity, if you fail many times and
you have made numerous attempts to achieve your goal, you
are definitely a creative person because your insistence on di-
recting your problem will lead you to the solution that is best
suited to you and your business, and this is exactly the case
of the programmer Bill Gates, he did not always succeed in
making the best, but because of his insistence, he managed to
enter the programming world from its widest gates, the Internet
Explorer experience was not successful as he was planning, but
he managed to make this browser a basic thing within the Win-
dows system, and we can say that he managed to defraud the
problem somewhat to achieve an even smaller part of his goal.
STEVE JOBS.
Some consider him an inventor and others consider him one of
the most successful businessmen in the world, while most of us
know him as the CEO of Apple.
The company began assembling and selling computers, present-
ing to the world one year after its creation, the Apple 2, which
was the first successful personal computer to be produced on a
commercial level.
Steve Jobs introduced the Macintosh system, which was the
121
first successful operating system with a graphic interface and a
mouse in 1984.
The idea of the mouse with the size of a small device and its
graphical interface was amazing in its days. This device achieved
unprecedented success and spread in the face of Microsoft.
Steve Jobs continued to discover more inventions that had a
leading role in the transformation of the technological world.
In 2007, Apple returned and made IPhone and its development
to serve people then in the year 2010, the iPad appeared and
opened a new horizon in the world of tablet computers. Thus,
Jobs crossed creative lines to facilitate people’s lives through his
inventions.
The magic of creativity lies in discovering ways to bridge the
gap between the limited toolkit and where you want to go at
the end. Therefore, you must fully define your goal and be-
lieve in your ideas with all faith in order to create a new world.
At the end, the thing that nurtures your mind is the one that
will shape your future, so be always careful to choose creative
ideas.
Creativity is not distributed for free. Creativity comes with
freedom, which goes hand in hand with increased manifesta-
tions of efficiency.
122
communication-skills
12
C ommunication skills are an important thing in our lives as
ordinary people, but it is a very important thing for pro-
grammers and never less than the technical skills that it has.
This importance appears greatly when working collectively. The
programmer must have many special skills that distinguish him
from others and that benefit him positively to accomplish the
tasks required of him in the best way. Now we will talk about
the importance of communication skills in general and espe-
cially among programmers, then we will mention some of these
skills later.
What are the communication skills and what is
their importance?
Communication skills are the ability to convey ideas in an ap-
propriate, clear and understandable manner to the other party,
with taking into account all differences in mind. In general, the
concept of communication skills is the process of exchanging
ideas between people to reach a solution that is most appropri-
ate for both parties
As for its importance, it will be great in improving work perfor-
mance. One of the important elements of communication skills
is the ability to listen. Through this element, business managers
can meet all the needs of customers and ensure that the work is
progressed in the appropriate way.
The communication greatly helps in spreading knowledge and
also receiving it. For example, when a number of people present
123
many ideas among them in different fields, it is possible to gain
many experiences and information within the fields presented.
It’s good to know that the benefits and importance of commu-
nication are not restricted to ordinary people, it is also very
useful to programmers.
Now we will talk about the importance of programmers’ com-
munication skills in particular, what are their benefits and how
does it affect work performance?
Communication is an imperative task in the field of technology
where the need to communicate more complex ideas to a wider
group of people has become an urgent need in this field, also a
communication is an important factor to make the technology
industry more comprehensive by enabling people from differ-
ent backgrounds to work well with each other in Projects, and
thus an increase in the work efficiency, as mentioned previously,
about the importance of communication skills.
124
What skills should the programmer improve
their efficiency and good work in:
1. Learn to Listen:
As software engineers, we know that when solving a problem,
we need to gather as much information as possible in order to
come up with the best solution and make the best decision. It
turns out that this is a great practice for solving and for com-
municating, too. That’s because great communication happens
when all parties reaches a point of mutual understanding. In
order to reach a mutual understanding, it’s important to both
convey your own thoughts and to fully listen to another per-
son’s.
2. Express Your Ideas with Public Speaking:
Public speaking is an important skill to work on as a software
engineer. It’s one of the common ways that software engineers
express ideas, whether that be in product demos, architectur-
al overviews, or even standup updates where you’re talking to
multiple people at once. It’s also worth noting that the more
you advance in your career, the more public speaking you’re
likely to encounter as your audience widens to more people and
the scope of your work increases in size and complexity. So you
have to work hard on this skill to achieve the desired benefit
3. Always Lead with Empathy When Com-
municating
Empathy is the act of putting yourself in someone else’s shoes to
try to understand their feelings and ideas.
It’s a core part of the software engineering job because the stuff
you’re making is for other people. You need to understand their
needs about how they’ll use a product so that you can make a
better product.
125
Also, you’re making this stuff with other people. You’ll work with
people in so many different roles — product managers, design-
ers, data scientists, managers, other software engineers— and
all of them will be individually unique in how they communi-
cate.
Putting yourself in their shoes will help you understand how to
effectively communicate with them so that you can reach mutu-
al understanding.
As a tech community, we really shouldn’t discount these skills
— they help move projects, companies, and organizations for-
ward. It’s an important skill to look for in software engineering
interviews and should be an expectation of people in technical
roles. Because when software engineers communicate effective-
ly together, great things happen — great things get built!
126
Resources
Networking Basics
1. Mashaikh, Ahmad H. CCNA R&S /ARABIC.
2. [Link]
in-networks/. Teach MV. [Online] [Cited: 2020 ,16 2.]
3. [Link]
types. Studytonight. [Online] [Cited: 2020 ,18 2.]
4. [Link] javatpoint. [Online] [Cited: 2020 ,19 2.]
5. Lammle, Todd. CCNA routing and switching study guide.
6. [Link] guru99. [Online] [Cited: 2
2020 ,19.]
7. [Link]
uobabylon. [Online] [Cited: 2020 ,20 2.]
8. [Link] wikipedia. [Online] [Cited: 2020 ,20 2.]
ALGORITHM
1. Jeff Erickson, Algorithms,2019 , Inc. ISBN: 2-64483-792-1-978 , https://
[Link]/details/Algorithms-Jeff-Erickson
2. Imre Varga, Algorithms and Basics of Programming, University of
Debrecen, Faculty of Informatics, 2017
3. Brad Miller, David Ranum, Problem Solving with Algorithms and Data
Structures,2013
4. Maria Christodoulou, Elżbieta Szczygieł, Łukasz Kłapa, Wojciech
Kolarz, Algorithmic and Programming. P.T.E.A. Wszechnica Sp. z [Link].
Rzeszowska 404-10,38 Krosno, 2018, Inc. ISBN 0-0-951529-83-978
127
Basic mathematical skills for
programmers
1. [Link]
2. [Link]
3. [Link]
4. [Link]
education
5. [Link]
6. [Link]
Mathematics_and_programming_problem_solving?enrichId=rgreq-
423a1afaa252b4141572de7ce06b08f-7XXX&enrichSource=Y292ZXJQYW
dlOzIyODQxMTUzNztBUzoxMDMzOTcxMzA3Njg0MDRAMTQwMTY2
MzIwNTc2Mg3%D3%D&el=1_x_3&_esc=publicationCoverPdf
SDLC
1. [Link]
2. [Link]
3. [Link]
4. [Link]
Clean Code
1. WHAT IS CLEAN CODE?
[Link]
128
Database (DB)
1. Wisdomby Gene Bellinger, Durval Castro, Anthony Mills: Data,
Information, Knowledge,.
2. Morton M. Astrahan, Mike W. Blasgen, Donald D. Chamberlin, Kapali
P. Eswaran, Jim Gray, Patricia P. Griffiths, W. Frank King III, Raymond A.
Lorie, Paul R. McJones, James W. Mehl, Gianfranco R. Putzolu, Irving L.
Traiger, Bradford W. Wade, Vera Watson: System R: Relational Approach
to Database Management. ACM Trans. Database Syst. 1976(137-97 :)2(1)
BibTeX.
3. Paolo Atzeni, Valeria De Antonellis: Relational Database Theory.
Benjamin/Cummings 1993, ISBN 2-0249-8053-0.
4. [Link]
5. Deborah Morley, Charles S. Parker: Understanding Computers,
Chapter14: Databases and Database Management Systems.
6. Almeida, Fernando. (2016). Practical SQL Guide for Relational
Databases.
7. James [Link],Paul [Link]: SQL: The Complete Reference, ISBN:
0072118458.
8. Michael Stronebraker: SQL databases v. NoSQL databases, publication:
Communication of the ACM, April 2010.
Basic of testing
1. Patton, Ron , Software Testing Second Edition, [Link],2006,
Inc. ISBN8-32798-672-0-13:978-
2. Loveland Scott, Miller Geoffrey, Prewitt JR Richard, Shannon
Michael, Software testing techniques: finding the defects that matter,
Charles River Media,inc,2005 , ISBN 7-346-58450-1
3. [Link]
129
SELF LEARNING
1. Defenition :
[Link]
Gradepower learning , Resource center
2. Advantages of self-learning:
[Link]
Brighter Monday Kenya
3. Achieving self-learning:
[Link]
Brighter Monday Kenya
Creativity
• A few of ideas were used from the article «How to be a creative
programmer» ([Link]
programmer4067-da4b9349)
• [Link]
jobs/
• [Link]
Communication-Skills
[Link]
skills-a-core-part-of-software-engineering-c7d379cebd66
130
انــا مهنـدس
I am an Engineer
The team that supervised the preparation
and Proofreadtion of the book
Eng. Nora Haidar Eng. Sally Nanaa
Eng. Hazem Hamzah Eng. Douha Mhanna
Eng. Yara Mohammed Eng. Youmna Yazji
Eng. Yazan Sartawi Eng. Qais Jarbou
Eng. Amer Kherbek Eng. Mohammed Aldhanuna
Eng. Humam Dawood