0% found this document useful (0 votes)
3 views132 pages

Essential Programming Skills Guide

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views132 pages

Essential Programming Skills Guide

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

7 Networking Basics

Preparing the chapter: Eng. Nora Haidar


Proofreading: Eng. Qais Jarbou

30 ALGORITHM
Preparing the chapter: Eng. Hazem Hamzah
Proofreading: Eng. Mohammed Aldhanuna

44 Basic Mathematical Skills


For Programmers
Preparing the chapter: Eng. Yara Mohammed
Proofreading: Eng. Qais Jarbou

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

103 Self Learning


Preparing the chapter: Eng. Amer Kherbek
Proofreading: Eng. Mohammed Aldhanuna

108 Time Management


Preparing the chapter: Eng. Sally Nanaa
Proofreading: Eng. Mohammed Aldhanuna

112 Problem solving skill


Preparing the chapter: Eng. Douha Mhanna
Proofreading: Eng. Qais Jarbou

117 Creativity
Preparing the chapter: Eng. Youmna Yazji
Proofreading: Eng. Qais Jarbou

123 Communication Skills


Preparing the chapter: Eng. Youmna Yazji
Proofreading: Eng. Mohammed Aldhanuna

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.

2. Twisted Pair Wires: It is a type of copper cable in which


two conductors of a single circuit are twisted together for the
purposes of improving electromagnetic compatibility, there
are three kinds of them:
• Unshielded twisted pair (UTP)
• Shielded twisted pair (STP)
• folded twisted pair (FTP)

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 .

4. Wireless networks: In a wireless network electromagnetic


waves don’t need any physical wire to travel. They can
penetrate through air, walls and windows and can be used
to deliver long distances messages.

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.

Features of Mesh Topology:


1. Fully connected.
2. Provides security and privacy.

Disadvantages of Mesh Topology:


1. Installation and configuration is difficult.
2. Cabling cost is high.
3. Not flexible.

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.

Features of Bus Topology:


1. It transmits data only in one direction.
2. Every device is connected to a single cable
3. It doesn’t cost much.

Disadvantages of Bus Topology:


1. When a cable fails, the whole network fails.
2. If the network traffic is heavy or nodes are many, the
performance of the network decreases.
3. A cable has a limited length.

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.

Features of Ring Topology:


1. Cheap to install and expand
2. The possibility of connecting on long distances

Disadvantages of Ring Topology:


1. Troubleshooting is difficult in ring topology.
2. Adding or deleting a computer disturbs the network
activity.
3. Failure of one computer disturbs the whole network.
w

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.

Features of Star Topology:


1. Every node has its own dedicated connection to the hub.
2. Hub acts as a repeater for data flow.
3. Fast performance with few nodes and low network traffic.
4. Hub can be upgraded easily.
5. Easy to troubleshoot.
6. Easy to setup and modify.
7. Only that node is affected when it fails, the rest of the
nodes can work smoothly.

Disadvantages of Star Topology:


1. Cost of installation is high.
2. Expensive to use.
3. If the hub fails then the whole network is stopped because
all the nodes depend on the hub.
4. Performance is based on the hub that itself depends on its
capacity.

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.

Features of Tree Topology:


1. Ideal if workstations are located in groups.
2. Used in Wide Area Network.
3. Extension of bus and star topologies.
4. Expansion of nodes is possible and easy.
5. Easily managed and maintained.
6. Error detection is easily done.

Disadvantages of Tree Topology:


1. Heavily cabled.
2. Costly.
3. If more nodes are added, maintenance is difficult.
4. Central hub fails, network fails.

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.

Features of Hybrid Topology:


1. Inherits the advantages and disadvantages of the topologies
included
2. Reliable as error detecting and troubleshooting are easy.
3. Effective.
4. Scalable as size can be increased easily.
5. Flexible.

Disadvantages of Hybrid Topology:


1. Complex in design.
2. Costly. (3) (1).

15
Network Types
A computer network can be categorized by their size to four
types:

• LAN (Local Area Network)


• PAN (Personal Area Network)
• MAN (Metropolitan Area Network)
• WAN (Wide Area Network)

LAN (Local Area Network)


• Local Area Network is a group of computers connected to
each other in a small area such as a building or an office.
• It costs less as it is built with inexpensive hardware such as
hubs, network adapters, and Ethernet cables.
• Local Area Network provides higher security.

PAN

PAN (Personal Area Network)


• Personal Area Network is a network arranged within an
individual person, typically within a range of 10 meters.
• Personal Area Network covers an area of 30 feet.
• Personal computer devices that are used to develop the
Personal Area Network are the laptop, mobile phones, media
player, and play stations.

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.

The two protocols used in this layer are:

• Transmission Control Protocol (TCP):


• It is a standard protocol that allows the systems to
communicate over the internet.
• It establishes and maintains a connection between
hosts.
• When data is sent over the TCP connection, then
the TCP protocol divides the data into smaller units
known as segments. Each segment travels over the
internet using multiple routers, and they arrive in
different order at the destination. The transmission
control protocol reorders the packets in the correct
order at the receiving end.
• It is a reliable transport protocol.

• User Datagram Protocol (UDP)


• User Datagram Protocol is a transport layer protocol.
• It is an unreliable transport protocol as in this case
receiver does not send any acknowledgment when the
packet is received, the sender does not wait for any
acknowledgment. Therefore, this makes a protocol
unreliable.

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:

TCP/IP is a layered server architecture system in which each


layer is defined according to a specific function to perform.
All these four layers collaborate to transmit the data from
one layer to another. Its Layers are:
o Application Layer
o Transport Layer
o Internet Layer
o Network Interface

• Support for a flexible architecture.


• In TCP/IP, the network remains intact as long as the source,
and the destination machines are functioning properly.
• TCP is a connection-oriented protocol.
• TCP offers reliability and ensures that data which arrives out
of sequence is put back into order.
• TCP allows you to implement flow control, so sender never
overpowers a receiver with data.

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:

Logical addresses are necessary for universal communications


that are independent of underlying physical networks. Physical
addresses are not adequate in an internetwork environment
where different networks can have different address formats.
A universal addressing system is needed in which each host
can be identified uniquely, regardless of the underlying physical
network. The logical addresses are designed for this purpose.
A logical address in the Internet is currently a (-32bit in IPv4
or -128bits in IPv6) address that can uniquely define a host
connected to the Internet. No two publicly addressed and visible
hosts on the Internet can have the same IP address.
In IPv4, the address consists of 32 bits, it is divided into two
parts, not necessarily equal , the left one is called the network
part and the right one is called the user part, and there is a
prefix that refers to the number of bits in the network part .
For example: 10101100.00010000.00000000.00 = 22/[Link]
22/000000

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.

Most Common TCP/IP Protocols:


Some widely used TCP/IP protocols are:

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.

Examples of real-life algorithms are: operating a laundry machine,


playing a video game, baking a cake.

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.

O ur goal then is to show how the algorithm’s execution time


changes with respect to the size of the problem.

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.

Syntax and Semantics:


A computer needs to be able to interpret an algorithm in order
to execute the process described by the algorithm. As such, the
computer must be able to:
• Understand in which form an algorithm is expressed.
• Execute the operations described by the algorithm.
In the present section we will look into the form in which
algorithms are expressed. The set of grammatical rules which
govern how the symbols in a language may be legitimately used
is called the syntax of the language (Goldschlager and Lister,
1988).
A program which adheres to the syntax of the language in which
it is expressed is said to be syntactically correct. A deviation
from the legitimate syntax of a language is called a syntax error.
Syntactic correctness is normally a prerequisite for a computer
to be in position to execute a program.
The meaning of particular forms of expression in a language
is called the semantics of the language. Detection of semantic

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.

Stepwise Refinement of Algorithms:


The design of algorithms describing non-trivial processes is
usually very difficult. Very frequently the errors appearing in
algorithms have to do with the process described where the
described process is very close to the intended process but not
exactly.
Another common failure is when execution results in the
intended process being carried out, but in certain circumstances
(unforeseen or overlooked by the designer) it does not. Here is
such an example (Goldschlager and Lister, 1988) which describes
how to calculate the flight time of an aircraft from an arrival
timetable:
1. Look up departure time
2. Look up arrival time
3. Subtract departure time from arrival time
This algorithm will produce the correct result in most cases, but
will fail to do so if the departure point and the destination are
in different time zones.

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)

The coffee-making algorithm involves simple steps to be


executed sequentially:]
• Steps are executed one at a time and not in parallel.
• Each step is executed only once.
• Execution order is the order in which steps are written.
• Execution of the last step terminates the algorithm.

Such an algorithm is not flexible as it cannot be adapted to


respond to different circumstances. For example, think about
the unavoidable situation that at some point the coffee jar is
empty or the situation when the robot needs to handle several
requests for coffee or custom requests for milk or sugar.
The conclusion is that an algorithm which is merely a combination
of steps in a sequence will not get us far and more flexible
structures are needed in order to design algorithms capable of
realistically depicting real life situations.

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

In this case we can select between two alternative steps, in which


case the condition (fuel indicator on or off) dictates which step
is to be executed based on the situation we are faced with.

Iteration:
(Part of the algorithm should be capable for repetition, either a
defined number of times or until a certain condition has been met.)

Iteration is the repetition of a process in a computer program.


Iterations of functions are common in computer programming,
since they allow multiple blocks of data to be processed in
sequence. This is typically done using a «while loop» or «for
loop». These loops will repeat a process until a certain number
or case is reached.
Simply put, Iteration means repeating the same step several
times.
Iterative algorithms should obey three important principles:
1. An iterative process repeats (iterates) a certain sub-process.
2. Each iteration should change at least one value.
3. There should be some condition under which the iteration
terminates. And the iteration should reach that state.

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.

BASIC DATA STRUCTURES


What are Linear Structures?
We will begin our study of data structures by considering four
simple but very powerful concepts. Stacks, queues, deques, and
lists are examples of data collections whose items are ordered
depending on how they are added or removed. Once an item
is added, it stays in that position relative to the other elements
that came before and came after it. Collections such as these
are often referred to as linear data structures.
Linear structures can be thought of as having two ends.
Sometimes these ends are referred to as the “left” and the
“right” or in some cases the “front” and the “rear.” You could
also call them the “top” and the “bottom.” The names given
to the ends are not significant. What distinguishes one linear
structure from another is the way in which items are added and
removed, in particular the location where these additions and
removals occur. For example, a structure might allow new items
to be added at only one end. Some structures might allow items
to be removed from either end.
These variations give rise to some of the most useful data
structures in computer science.

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.

2.1 Mathematics in problem solving


Students must have the necessary mathematical concepts to
solve some types of problems. They should apply strategies
and mathematical concepts to solve a wide variety of everyday
problems, especially those with a programming solution. In
addition, they should generalize solutions and strategies in
order to use them in new situations.

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.

2.3 Mathematical connections


This standard means that students establish connections
between daily-life situations and mathematics as well as
programming. Then, it is very important that students can
recognize relationships among different topics in various
domains, especially in mathematics and programming.

2.4 Numbers and relations between numbers


Although there are different numerical representations but
equivalent, to characterize the same amount (real numbers,
fractions, decimals, percentages, powers, scientific notation,
..etc.) this standard intends to demonstrate that it is very
important to develop a deep understanding of various numerical
representations and realize that in some situations there are
representations that are more suitable than others.

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.

3. Math for programming


There are several math topics a programmer should learn
during early stages of programming learning, and here are the
most important of them:
• Discrete mathematics: It is the study of mathematical
structures that are fundamentally discrete rather than continuous.
In contrast to real numbers that have the property of varying
«smoothly», the objects studied in discrete mathematics – such
as integers, graphs, and logical statements, do not vary smoothly
in this way, but have distinct, separated values.
Discrete mathematics therefore excludes topics in «continuous
mathematics» such as calculus or Euclidean geometry. Discrete
objects are often enumerated by integers. More formally,
discrete mathematics has been characterized as the branch of
mathematics dealing with countable sets (finite sets or sets with
the same cardinality as the natural numbers). However, there is
no exact definition of the term «discrete mathematics.» Indeed,
discrete mathematics is described by what is included than by
what is excluded: continuously varying quantities and related
notions.

46
• Linear algebra: It is the branch of mathematics concerning
linear equations such as

linear functions such as


and their representations in vector spaces and through matrices.
Linear algebra is central to almost all areas of mathematics. For
instance, linear algebra is fundamental in modern presentations
of geometry, including for defining basic objects such as lines,
planes and rotations. Also, functional analysis may be basically
viewed as the application of linear algebra to spaces of functions.
Linear algebra is also used in most sciences and engineering
areas, because it allows modeling many natural phenomena,
and efficiently compute such models. For nonlinear systems,
which cannot be modeled with linear algebra, linear algebra is
often used for dealing with first-order approximations, using
the fact that the differential of a multivariate function at a point
is the linear map that best approximates the function near that
point.
• Probability: Probability is the likelihood or chance of an
event occurring.

• Statistics: It is the study of the collection, analysis,


interpretation, presentation, and organization of data. In other
words, it is a mathematical discipline to collect, summarize data.
Its methods involve data collecting, data summarization,
statistical analysis, and interpreting variable numerical data.

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:

• Stage 1: Planning and Requirement Analysis.


• Stage 2: Defining Requirements.
• Stage 3: Designing the Product Architecture.
• Stage 4: Building or Developing the Product.
• Stage 5: Testing the Product.
• Stage 6: Deployment in the Market and Installation.
• Stage 7: Maintenance.

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.

Stage 2: Defining Requirements


Once the requirement analysis is done the next step is to clearly
define and document the product requirements and get them
approved from the customer or the market analysts.
This is done through an SRS (Software Requirement Specification)
document which consists of all the product requirements to be
designed and developed during the project lifecycle.

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.

Stage 4: Building or Developing the Product


In this stage of SDLC the actual development starts and the
product is built. The programming code is generated as per
DDS during this stage. If the design is performed in a detailed
and organized manner, code generation can be accomplished
without much hassle.
Developers must follow the coding guidelines defined by their
organization and programming tools like compilers, interpreters,
debuggers, etc.
These Compilers are used to generate the code. Different high
level programming languages such as C#, C++, Java, Python,

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.

Stage 5: Testing the Product


This stage is usually a subset of all the stages as in the modern
SDLC models, the testing activities are mostly involved in all
the stages of SDLC. However, this stage refers to the testing
only stage of the product where product defects are reported,
tracked, fixed and retested, until the product reaches the quality
standards that defined in the SRS.

Stage 6: Deployment in the Market and


Installation
Once the product is tested and ready to be deployed it is released
formally in the appropriate market.
Sometimes product deployment happens in stages as per the
business strategy of that organization, the product may first be
released in a limited segment and tested in the real business
environment UAT (User Acceptance Testing).
Then based on the feedback, the product may be released as
it is or with suggested enhancements in the targeting market
segment.
After the product is released in the market, its maintenance is
done for the existing customer base.

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.

Popular SDLC models


There are Multiple Models for SDLC:
Waterfall model:
The waterfall model is a widely accepted SDLC model.
In this approach, the whole process of the software development
is divided into various stages.
In this SDLC model, the outcome of one Stage acts as the input
for the next stage.
This SDLC model is documentation-intensive, it depends on
earlier stages documentation to decide what needs be performed
in the subsequent stages.

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.

Big Bang model:


The Big Bang model is focusing on all types of resources in
software development and coding, with no or very little planning.
The requirements are understood and implemented when they
come.
This model works best for small projects with smaller size
development teams which are working together. It is also useful
for academic software development projects. It is an ideal model
where requirements are either unknown or the final release date
is not given.

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:

• Planning and Requirement Analysis: In this stage we


define the type of our store, which will be for Electronics,
Clothing, Cosmetics ..etc, What is the project Budget and
What is the Risks.

55
• Defining Requirements: In this Stage the product or
the project requirements should be clearly defined and
documented.

• Designing the Product Architecture: In this section


the product appearance, costs, behavior, Maintenance are
designed and carefully selected in order to get the best result
and provide ease of use.

• Building or Developing the Product : After Designing


the online store now it’s time to actually build it, so we start
to work on developing the Web Page using the appropriate
programming language such as HTML, CSS, JavaScript and
PHP, each programming language serves a role in the Web
Page, for Example JavaScript is used to define the behavior of
the Web page for instance «What Happens When you Click
on a Button or an Image», PHP is used to get Data from the
Server that will hold the products Names, Prices, Quantity..
etc.

• Testing the Product: In this Stage we test the store as if


we are the customers and we start taking notes, «Is it working
propably?», «Is the web page compatible with different
Browsers?», «Is there any Issues in a payment?» ..etc. This
section is very important because it›s a preview of the product
and by carefully testing the product we can prevent it from
failure.W

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.

• Maintenance: Based on the feedback appropriate


Maintenance or Upgrade can be Implemented.

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.

One could argue that for the code to be easy to change:


• Classes and methods are small and only have single
responsibility
• Classes have clear and concise public APIs
• Classes and methods are predictable and work as expected
• The code is easily testable and has unit tests (or it is easy to
write the tests)
• Tests are easy to understand and easy to change

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.

Clean Code Principles :


Bad code works until it›s the year 2000. Bad code is difficult to
understand, more complex than it should be, not easy to test,
and it makes other developers seethe with frustration. While
it might take longer to write clean code in the short term, it›s
beyond established that writing clean code will save everyone’s
time, effort, and ultimately money.
But there›s always room to learn. No one writes clean code from
the beginning. So here are some principles and rules to learn
writing a clean code:
Clean Code Principles
Clean code doesn›t rely on language-specific rules. Instead,
it relies on language-agnostic principles agreed upon by the
developer community. As such, even though the initial question
on our Slack channel was about how to keep your JavaScript /
TypeScript code clean

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?»

2. DRY: Don›t Repeat Yourself. Closely related to KISS and


the minimalist design philosophy. It states that every piece of
knowledge (code, in this case) must have a single, unambiguous,
authoritative representation within a system (codebase).
Violations of DRY are referred to as WET: We Enjoy Typing,
Write Everything Twice, Waste Everyone›s Time.

3. YAGNI: You Aren›t Gonna Need It. A developer should


not add functionality unless deemed necessary. YAGNI is part
of the Extreme Programming (XP) methodology, which wants
to improve software quality and increase responsiveness to
customer requirements. YAGNI should be used in conjunction
with continuous refactoring, unit testing, and integration.

4. COMPOSITION OVER INHERITANCE:


Not an acronym, sadly. It›s a principle where you design your
types over what they do instead of over what they are.
Composition is favored over inheritance by many developers,
because inheritance forces you to build a taxonomy of objects
early on in a project, making your code inflexible for changes
later on.

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.

6. Practice consistency: This is arguably the overarching


principle of all clean code principles. If you decide to do
something a certain way, stick to it throughout the entire project.
If you have no choice but to move away from your original
choice

Of course, this is by no means a comprehensive list. There›s


so much more to clean code. In fact, if you want an excellent
book on clean code, we recommend The Art of Readable
Code by D. Boswell and T. Foucher.

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.

• Relational DBMS - this type of DBMS defines database


relationships in form of tables, also known as relations. Unlike
network DBMS, RDBMS does not support many-to-many
relationships. Relational DBMS usually have pre-defined data
types that they can support. This is the most popular DBMS type
in the market. Examples of relational database management
systems include MySQL, Oracle, and Microsoft SQL Server
database.

• Object Oriented Relation DBMS - this type supports


storage of new data types. The data to be stored is in form of
objects. The objects to be stored in the database have attributes
(i.e. gender, age) and methods that define what to do with the
data. PostgreSQL is an example of an object oriented relational
DBMS.

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;

• SQL(relational) databases have a mature data storage and


management model. This is crucial for enterprise users.
• SQL databases support the notion of views which allows
users to only see data that they are authorized to view. The
data that they are not authorized to see is kept hidden from
them.
• SQL databases support stored procedure which allow
database developers to implement part of the business logic
into the database.W
• SQL databases have better security models compared to
NoSQL databases.
The world has not deviated from use of relational databases.
There is a growing demand for professionals who can handle
relational databases. Thus learning databases and SQL still
holds merit.

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.

What Can SQL do?


• SQL can execute queries against a database
• SQL can retrieve data from a database
• SQL can insert records in a database
• SQL can update records in a database
• SQL can delete records from a database
• SQL can create new databases
• SQL can create new tables in a database
• SQL can create stored procedures in a database
• SQL can create views in a database
• SQL can set permissions on tables, procedures, and views

SQL is a Standard - BUT....


Although SQL is an ANSI/ISO standard, there are different
versions of the SQL language.
However, to be compliant with the ANSI standard, they
all support at least the major commands (such as SELECT,
UPDATE, DELETE, INSERT, WHERE) in a similar manner.
Note: Most of the SQL database programs also have their own
proprietary extensions in addition to the SQL standard!

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:

Customer Customer Contact Address City Postal Country


ID Name Name Code

1 Alfreds Maria Obere Str. Berlin 12209 Germany


Futterkiste Anders 57

Ana Trujillo Avda. de la


2 Emparedados
Ana México 05021 Mexico
Constitución
y helados Trujillo 2222
D.F.

3 Antonio Antonio Mataderos México 05023 Mexico


Moreno Moreno 2312 D.F.
Taquería
120
4 Around Thomas Hanover London WA1 1DP UK
the Horn Hardy Sq.

5 Berglunds Christina Berguvsvägen


Luleå S22 958- Sweden
snabbköp Berglund 8

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;

Keep in Mind That...


• SQL keywords are NOT case sensitive: select is the same as
SELECT
Semicolon after SQL Statements?
Some database systems require a semicolon at the end of each
SQL statement.
Semicolon is the standard way to separate each SQL statement
in database systems that allow more than one SQL statement to
be executed in the same call to the server.

Some of The Most Important SQL


Commands
• SELECT - extracts data from a database.
• UPDATE - updates data in a database.
• DELETE - deletes data from a database.
• INSERT INTO - inserts new data into a database.
• CREATE DATABASE - creates a new database.
• ALTER DATABASE - modifies a database.
• CREATE TABLE - creates a new table.
• ALTER TABLE - modifies a table.
• DROP TABLE - deletes a table.
• CREATE INDEX - creates an index (search key).
• DROP INDEX - deletes an index

72
• SQL CREATE DATABASE Statement
The CREATE DATABASE statement is used to create a new
SQL database.
Syntax
CREATE DATABASE databaseName;

•SQL DROP DATABASE Statement


The DROP DATABASE statement is used to drop an existing
SQL database.
Syntax
DROP DATABASE databaseName;

• SQL CREATE TABLE Statement


The CREATE TABLE statement is used to create a new table
in a database.
Syntax
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);

• SQL DROP TABLE Statement


The DROP TABLE statement is used to drop an existing table
in a database.
Syntax
DROP TABLE table_name;

Note: Be careful before dropping a table. Deleting a table will


result in loss of complete information stored in the table!
73
• SQL ALTER TABLE Statement
The ALTER TABLE statement is used to add, delete, or modify
columns in an existing table.
The ALTER TABLE statement is also used to add and drop
various constraints on an existing table.

1. ALTER TABLE - ADD Column


To add a column in a table, use the following syntax:
ALTER TABLE table_name
ADD column_name datatype;

2. ALTER TABLE - DROP COLUMN


To delete a column in a table, use the following syntax (notice
that some database systems don›t allow deleting a column):
ALTER TABLE table_name
DROP COLUMN column_name;

3. ALTER TABLE - ALTER/MODIFY


C O LU M N
To change the data type of a column in a table, use the following
syntax:
ALTER TABLE table_name
MODIFY column_name datatype;

74
SQL Constraints
SQL constraints are used to specify rules for data in a table.

• SQL Create Constraints


Constraints can be specified when the table is created with the
CREATE TABLE statement, or after the table is created with
the ALTER TABLE statement.
Syntax
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);

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:

• NOT NULL - Ensures that a column cannot have a NULL


value.
• UNIQUE - Ensures that all values in a column are different.
• PRIMARY KEY - A combination of a NOT NULL and
UNIQUE. Uniquely identifies each row in a table.

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

• SQL SELECT Statement


The SELECT statement is used to select data from a database.
The data returned is stored in a result table, called the result-
set.
SELECT Syntax
SELECT column1, column2, ...
FROM table_name;
Here, column1, column2, ... are the field names of the table you want
to select data from. If you want to select all the fields available in
the table, use the following syntax:
SELECT * FROM table_name;

• SQL SELECT DISTINCT Statement


The SELECT DISTINCT statement is used to return only
distinct (different) values.
Inside a table, a column often contains many duplicate values;
and sometimes you only want to list the different (distinct)
values.
SELECT DISTINCT Syntax
SELECT DISTINCT column1, column2, ...
FROM table_name;

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 SQL AND, OR and NOT Operators

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;

• SQL ORDER BY Keyword


The ORDER BY keyword is used to sort the result-set in
ascending or descending order.
The ORDER BY keyword sorts the records in ascending order
by default. To sort the records in descending order, use the
DESC keyword.
ORDER BY Syntax
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

• SQL INSERT INTO Statement


The INSERT INTO statement is used to insert new records in
a table.
INSERT INTO Syntax
It is possible to write the INSERT INTO statement in two ways.
The first way specifies both the column names and the values
to be inserted:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
If you are adding values for all the columns of the table, you
do not need to specify the column names in the SQL query.

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, ...);

• What is a NULL Value?


A field with a NULL value is a field with no value.
If a field in a table is optional, it is possible to insert a new
record or update a record without adding a value to this field.
Then, the field will be saved with a NULL value.
Note: A NULL value is different from a zero value or a field
that contains spaces. A field with a NULL value is one that
has been left blank during record creation!

• How to Test for NULL Values?


It is not possible to test for NULL values with comparison
operators, such as =, <, or <>.
We will have to use the IS NULL and IS NOT NULL operators
instead.
1. IS NULL Syntax
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
2. IS NOT NULL Syntax
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;

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!

• SQL DELETE Statement


The DELETE statement is used to delete existing records in a
table.
DELETE Syntax
DELETE FROM table_name WHERE condition;
Note: Be careful when deleting records in a table! Notice the
WHERE clause in the DELETE statement. The WHERE
clause specifies which record(s) should be deleted. If you omit
the WHERE clause, all records in the table will be deleted!

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;

• SQL COUNT(), AVG() and SUM() Functions


The COUNT() function returns the number of rows that matches
a specified criteria.
The AVG() function returns the average value of a numeric
column.
The SUM() function returns the total sum of a numeric column.
1. COUNT() Syntax
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
2. AVG() Syntax
SELECT AVG(column_name)
FROM table_name
WHERE condition;
3. SUM() Syntax
SELECT SUM(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:

LIKE Operator Description


WHERE CustomerName Finds any values that start
LIKE ‹a%› with «a»
WHERE CustomerName Finds any values that end
LIKE ‹%a› with «a»
WHERE CustomerName Finds any values that have
LIKE ‹%or%› «or» in any position
WHERE CustomerName Finds any values that have «r»
LIKE ‹_r%› in the second position

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»

• SQL Wildcard Characters


A wildcard character is used to substitute one or more characters
in a string.
Wildcard characters are used with the SQL LIKE operator.
The LIKE operator is used in a WHERE clause to search for a
specified pattern in a column.

1. Wildcard Characters in MS Access:


Sym-
Description Example
bol
Represents zero or more bl* finds bl, black, blue,
*
characters and blob
Represents a single char-
? h?t finds hot, hat, and hit
acter
Represents any sin-
h[oa]t finds hot and hat,
[] gle character within the
but not hit
brackets
Represents any character h[!oa]t finds hit, but not
!
not in the brackets hot and hat
Represents a range of
- c[a-b]t finds cat and cbt
characters
2#5 finds 205, 215, 225,
Represents any single nu-
# 235, 245, 255, 265, 275,
meric character
285, and 295

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 BETWEEN Operator


The BETWEEN operator selects values within a given range.
The values can be numbers, text, or dates.
The BETWEEN operator is inclusive: begin and end values
are included.
BETWEEN Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

• 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

Different Types of SQL JOINs:


Here are the different types of the JOINs in SQL:
• (INNER) JOIN: Returns records that have matching val-
ues in both tables
• LEFT (OUTER) JOIN: Returns all records from the left
table, and the matched records from the right table
• RIGHT (OUTER) JOIN: Returns all records from the
right table, and the matched records from the left table
• FULL (OUTER) JOIN: Returns all records when there
is a match in either left or right table.
  

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;

2. SQL LEFT JOIN Keyword

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;

Note: In some databases LEFT JOIN


is called LEFT OUTER JOIN.

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;

Note: In some databases RIGHT JOIN is called RIGHT OUT-


ER JOIN.

4. SQL FULL OUTER JOIN Keyword


The FULL OUTER JOIN keyword returns all records when
there is a match in left (table1) or right (table2) table records.
Note: FULL OUTER JOIN can potentially return very large
result-sets!
Tip: FULL OUTER JOIN and FULL JOIN are the same.

89
FULL OUTER JOIN Syntax
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;

5. SQL Self JOIN


A self JOIN is a regular join, but the table is joined with itself.
Self JOIN Syntax
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

90
Basic of testing
7
Software Testing-Overview

S oftware testing is process used to measure the information


related to quality of the product or service under test, evalu-
ation a software item to detect differences between given input
and expected output, also to assess software features, in this
process we are doing measurement of quality & typically try to
find the completeness, correctness, security of product or ser-
vice under test.
Software testing is a process that should be done during the
development process. In other words, software testing is a veri-
fication and validation process.

Who does Testing?


It depends on the process and the associated stakeholders of
the project(s). In IT industry, large companies have a team with
responsibilities to evaluate the developed software in context
of the given requirements. Moreover, developers also conduct
testing which is called Unit Testing. In most cases, the following
professionals are involved in testing system within their respec-
tive capacities:
• Software Tester
• Software Developer
• Project Lead/Manager
• End User

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

When to Start Testing?


An early start to testing reduces the cost and time to rework
and produce error-free software that is delivered to the client.
However, in SDLC testing can be started from the requirements
gathering phase until the deployment of the software. It also
depends on the development model that is being used. For ex-
ample, in the Waterfall model, formal testing is conducted in
the testing phase; but in the incremental model, testing is per-
formed at the end of every increment/iteration and the whole
application is tested at the end.
Testing is done in different forms at every phase of SDLC:
● During the requirement gathering phase, the analysis and
verification of requirements are also considered as testing.
● Reviewing the design in the design phase with the intent
to improve the design is also considered as testing.
● Testing performed by a developer on completion of the
code is also categorized as testing.

When to Stop Testing?


It is difficult to determine when to stop testing, as testing is
a never-ending process and no one can claim that a software
is 100% tested. The following aspects are to be considered for
stopping the testing process:

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

Methods of Software Testing


Black-Box Testing:
Also called functional or specification-based testing, this meth-
od focuses on output. Testers aren’t concerned with the internal
mechanisms. They only check the software does what it’s sup-
posed to. Knowledge of coding isn’t necessary, and testers work
at user interface level.
White-Box Testing:
This method uses coding know-how as part of the test proce-
dure. When a product fails, testers go as deep into the code as
necessary to find the cause. The software developers do this
themselves since they determine how the product should work.
Structure-Based and Glass-Box Testing are other names for this
method.
In order to implement White-Box Testing, the tester has to deal
with the code and hence is needed to possess knowledge of
coding and logic i.e. internal working of the code. White box
test also needs the tester to look into the code and find out
which unit/statement/chunk of the code is malfunctioning.

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.

Functional testing types:


Given below is a list of some common types of Software Testing:

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

Defect Vs. Wrong, Miss, Error, Bug, Failure, And


Fault
In Software Testing, Defect has many names such as Wrong,
Miss, Error, Bug, Failure, and Fault. Let’s find out what all of
these are:

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.

Furthermore, test cases are written to keep track of


the testing coverage of a software. Generally, there
are no formal templates that can be used during test
case writing.

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:

S elf-learning is a learning method where people direct


their own learning and studying —outside the class-
room and without direct supervision. Since people are able
to take control of what and how they are learning, self-
learn can be a very valuable way for many people to learn.
As to programmers self-learning can be very useful to them
because it helps them decide what they really want.
It helps them decide what things to focus on and which branch
of the wide world of programming to go in.
And also, a Computer degree is not required to enter the world
of tech and programming.

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.

2. It is a Stress-Free Learning Process:


The process of self-learning places a great emphasis on the
process rather than the outcome of the learning. Moreover,
there is no pressure to learn the required content within a
certain time, with the ultimate goal being the achievement
of high grades. You choose what you want to learn when
you want to learn, and how you want to learn. The over-
all outcome is an internalization of content and this is why
self-learners tend to internalize what they learn, more than
those who take part in directed learning.

3. You Gain Other Skills in the Process:


When learning, you get to learn other important skills such
as time management, self-assessment, and setting your own
goals. These are important skills that you can apply any-
where. In fact, people who are good at self-learning have an
increased ability to develop other skills as they often have

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.

4. The Learning Experience Becomes More


Meaningful:
Self-driven learning comes from a personal desire to gain
new knowledge. It is driven by the need to find more infor-
mation about a topic and use the information for a particular
purpose. Therefore, you have a clear purpose of why you are
learning and the information gained is often relevant, making
it meaningful. Additionally, you are inclined to search deeper
information about a topic since you are not just learning for
the sake of learning. Learning now has a purpose and is en-
joyable, leading to good results.

5. Learning is Now Led by Curiosity:


A great part of learning is to satisfy some level of curiosity
and learning occurs naturally when there is curiosity. This
therefore, means that you will be motivated to learn and you
will get to acquire much more knowledge when the drive
comes from inside than outside sources. It becomes an ad-
venture and your capabilities are expanded each time you
successfully learn something new.

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.

How can we achieve Self-Learning?


Self-Learning requires lots of discipline and it can be chal-
lenging. However, it can be one of the most interesting learn-
ing experiences when done properly. Here is how to go about
self-driven learning.

1. Get Ready to Learn:


Any kind of learning requires one to be ready to take on the
subject because the truth is, there will be challenges and obsta-
cles along the way. Be in the right frame of mind, understand
what you want to learn and why this subject is important to
you. You will need lots of internal motivation so being ready to
learn will keep you on track even when your motivation levels
are low.

2. Have Clear Learning Goals:


Just like a teacher prepares a teaching scheme which is aimed at
helping learners attain different skills and knowledge at the end
of a lesson, so should your personal learning. When your learn-
ing goals are clear, you will be able to evaluate your progress

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.

3. Decide Which Tools You Want to Use:


With so many learning materials available, you are spoilt for
choice. Depending on the subject matter, there are different
resources available for you. Choose one that best suits your
learning style and one that will be most effective. The beauty of
self-driven learning is that you are not limited to a specific way
of learning. The availability of different tools also gives you the
chance to learn the same subject from different angles, which
makes it easier to grasp the main subject matter.

4. Decide How You Want to Assess Yourself:


Unlike formal learning which has exams every so often, self-driv-
en learning will often have no assessment tools. The trick here
is to, therefore, know what milestones you want to achieve along
the way, by what time, and then decide what will indicate that
you have learned something. Some online teaching resources
have small exams at the end of each course to assess your grasp
of the course so you can also take advantage of these.
Self-learning is an emerging form of learning that has emerged
due to the availability of learning resources online. Self-Learn-
ing enables you to learn what you want when you want, and
how you want. You drive the learning process and this tends to
be more effective that instructional learning.

107
Time Management
9
“Either you run the day, or the day runs you.” - Jim Rohn

T ime management is a study of the movement and time that


enables determining the time needed to perform the part
of a single process without a loss of time, which allows another
time to complete the parts, or subsequent operations, and com-
plementing, which ensures the completion of work in a timely
manner, and with high efficiency.

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.

Recommendations to improve time management


skills:

1. Planning:

If you are already overwhelmed, it might seem crazy, but you


should be spending as much or more time planning your work
than actually doing it. Planning allows you to take a big-picture
look at what you need to accomplish and when it needs to be
done. Then, you can break the project down into smaller tasks,

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:

When working on a big project, it is easy for me to get over-


whelmed at all the different items that need to get done. How-
ever, with a little planning, it can become evident what needs
to be accomplished first, what needs to get done eventually, and
what doesn’t need to be done at all. There are many different
ways to categorize tasks by priority, and once you do, you will
always know what task you should be working on next.

3. Deadlines:

Some deadlines are built into a project. If a client needs some-


thing by a specific date, you have your deadline. However, once
you have completed some planning of your own, it is helpful to
create your own deadlines for each component of the project.
Instead of training to manage your time around a larger goal
that could be days, weeks, or months away, you can determine
what needs to be done this week, or today, or even before lunch.

4. Monitoring.

It can be challenging to manage your time if you are not ac-


curately measuring where your time is going. Many freelancers
enjoy the freedom of not having to account for how they spend
their time. However, being accountable to yourself will enable
you to see how long tasks are taking. This will help you make

110
more accurate plans, and also capture any “time leaks”, places
where tasks are consuming far more time than they should.

5. Get Some Help.

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.

THE FINAL POINT about time management is the concept


of balance. The most important thing that you can instill in
your life is balance and moderation. By practicing the methods,
ideas, and techniques in this book, you will become a master
time manager, and have more time for your family and your
personal life.

Often, people take time management programs so that they can


increase the number of things that they can do on a day-to-day
basis. However, as the wise man said, “There is more to life than
simply increasing its speed”.

The main purpose of learning and practicing time management


skills is to enhance and improve the overall quality of your life.
It is to increase the amount of pleasure and happiness you ex-
perience.
“Lack of direction, not lack of time, is the problem. We all
have twenty-four-hour days”.

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.

Basic steps of general problem solving:


There are four basic steps for this process:
1- Define the problem:
In order to do that you must differentiate fact from opin-
ion, specify the underlying causes, understand every frac-
tion involved, then state the problem specifically. After
that, you have to identify what expectation is violated and
determine in which domain the problem lies, and a very
important point is to avoid trying to solve the problem
without data.

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.

3- Evaluate and select an alternative:


Skilled problem solvers use a series of considerations when se-
lecting the best alternative. They consider the extent to which:
• A particular alternative will solve the problem without
causing other unanticipated problems.
• All the individuals involved will accept the alternative.
• Implementation of the alternative is possible.
• The alternative fits with the organizational constraints.
4- Implement and follow up the solution:
Plan and implement a pilot test of the chosen alternative and
then, gather feedback from all affected parts, and for sure it’s
important to seek acceptance or consensus by all those affected.
After that, establish ongoing measures, monitor, and evaluate
long-term results based on final solution.

Now after we talked about solving a problem in general, we


should focus on how can we solve a programming problem
and here are the steps recommended:
• Read the problem at least three times:
You should read the problem over and over until you
truly feel that you are understanding it because the bet-
ter you understand the problem, the easier it will be to
solve it.

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.

• Simplify and optimize your steps


Look for patterns and see if there’s anything you can
generalize. See if you can reduce any steps or if you are
repeating any steps.

• 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.

• Translate pseudocode into code and de-


bug
When you have your pseudocode ready, translate each
line into real code in the language you are working with.

• Simplify and optimize your code


Try to make your code readable and simple, by taking
out any extra steps, deleting variables you didn’t use,
defining repeated steps in another function, and so on.

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.

• Write useful comments


You may not always remember what every single line
mean a month later. And someone else working on
your code may not know either. That’s why it’s import-
ant to write useful comments to avoid problems and
save time later on if you need to come back to it.

• Get feedback through code reviews


Get feedback from your teammates, professors, and
other developers.

• 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.

Who are the creative people and how are they


distinctive?
Creative people are those who have the ability to take advan-
tage all their ideas for achieving their goals. They know the
value of the positive ideas and the prospects ahead, and imple-
ment correctly.
More importantly, they have the ability to strike a balance be-
tween their emotions and their minds, and this is something
117
that a large portion of people lack.
What is the importance of creativity?
Creativity can only be in the person who has a strong will and
desire to change the world. Creativity has many and positive
benefits for us as human beings and for the world. It is a way
to get the best always and at the same time it requires focus
and high efficiency. A creative person develops the capabilities
of all individuals around him and motivate them to cope with
the negative factors around them. That is when they realize the
importance of what they are making. Such people enhance the
society from its roots.

Creativity in the programming world


Creativity is a basic and very required thing within the pro-
gramming world. Everyone knows that programming itself can
change the world in just one second. We can solve individuals’
problems, or make a big difference within society by writing a
program. Programming in general is able to find many solu-
tions to various problems and this is fundamental for creativity.
Shortly, we can say that programming is the language of the
universe.

Now we can ask what is the link between cre-


ativity and coder?
As we said previously, creators can see many things that others
cannot see.
Programmers are seen as people who follow sequential steps

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.

Practice the Art of “Doing Nothing”


The idea here is that doing nothing is an activity itself. Gen-
erally, creative minds need to mix work and relaxation. Taking
enough rest and relaxation is an important element of a cre-
ative process. These breaks give our minds the opportunity to
reform our new knowledge. We regain our alertness by these
breaks and continue working more effectively.
119
Look for Analogies
An analogy is a similarity between the current problem and a
previously solved problem. Identifying the similarities between
many problems is one of the most important creativity skills.
Indeed, creative programmers return to past successful projects
When they are stuck in a problem. This way, they can compare
their previous and current problems and this helps very much
in solving their problems.

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.

When we look at software development, we talk a lot about the


amazing inventions and technologies that will move our global
society one step further. But in reality, it’s people, real people
— not machines, algorithms, or robots — who decide what gets
built, how it gets built, when and where it gets into the hands
of people who’ll use it. There’s a very human aspect to software
engineering, so in a big sense, software development requires
very human skills in order to do the best job. So, it’s only natu-
ral that, in a highly detailed and skilled job like software devel-
opment, communication is key.

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]

2. CLEAN Code principles:


[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

Problem solving skill


1. [Link]
8a32d1e96d74
2. [Link]

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

Designed By Hazem Hamzy supervised by Douha Mhanna / dierctor of


I Am Engineer Programming Team

You might also like