Thursday, October 31, 2013

Data Structures

 
Algorithms +Data Structures = Programs
 
We often see that the concept of Data Structures is explained along with Algorithms. Have you ever wondered why? It is because, the underlying data structure of an algorithm plays an important role in determining the performance of the algorithm. So let us see what a data structure is and how it effects the performance of algorithms.
Data structure, as the name indicates is a particular way of storing and organizing data in a computer program. The definition looks good, but why do we use data structures? Suppose you are writing a computer program to store all the student information of your university. For that you have to store a lot information such as student name, ID, department, courses taken, grades, etc. Once you have all the information, you may want to know how many students enrolled in a particular course.  What is the average class standing in a particular course? What is the current GPA of a particular student? By just looking at the information you may not be able to answer such questions.  The data/information must be organized in such a way that one should be able to retrieve the data, perform some calculations on the data and find answers to their questions. This is where data structures come in.
Data structure should be designed/chosen in such a way that storing and retrieving of data is fast. Most computer programs deal with hundreds of thousands of data records. If you choose an improper data structure to store your data, retrieving a single record from thousands of records could take a lot of time and as you know, for a computer program, even a couple of seconds is a lot of time. So, choosing a wrong data structure makes your program slow (I told you! The choice of data structure affects the performance of an algorithm.)

Sunday, October 27, 2013

Hacking


We often hear about websites getting hacked and lots of confidential information getting compromised.  What is hacking? Hacking is a mechanism for detecting vulnerabilities of a system so as to build more robust systems. In my opinion, hacking is the best way to learn how a system works. But now-a-days hacking refers to exploiting the vulnerabilities of a system. How do hackers get hold of a system in the first place? Simple, they just wave their magical hacking wand and that’s it, the system is infected. Unfortunately, it does not work that way. To infect a system, hackers write a program and get it installed on the victim computer through e-mails, peer-to-peer networks or even regular websites. Once the system is infected, hackers can easily access the system and get the information they want.
Most of us think that hackers are very experienced and skilled programmers. You know what? That is not always the case. Investigators who monitor botnets say that the programs some hackers use are primitive and poorly programmed.

Also not all hackers use hacking to their advantage. This group of hackers who break the security for non-malicious reasons are known as white hat hackers. No wonder that white hat hackers are also known as ethical hackers. Many companies hire ethical hackers to test and find out the level of security of their systems. So, don’t learn to hack, hack to learn.

More on ethical hacking can be found here.

Saturday, October 12, 2013

Open Source

What is open source?
Open source is a methodology in which the end-product, source-material, blue-prints, documentation etc., are published and made available to the public, enabling anyone to copy, modify and redistribute without paying any fees.
Most of us think that open source means open source software (at least, I used to think so). But it does not necessarily have to be only software. Open source is used in many applications other than Computer software such as Electronics, Medicine, Robotics, Fashion and even Beverages (Don’t trust me? Check it out here.)

No one would want to use anything if it is no good. So, let us see some of the advantages of Open Source.
·         The fact that the Open Source resources can be downloaded and used at no cost is the primary advantage.
·         In terms of computer software since Open Source Software is available to anyone, more developers can view the code and review the code making the software more robust.
·         If you are an aspiring developer who wants to develop a new product, you can just use any existing Open Source Software (Operating System) suitable for your product and develop your applications on top of it without having to worry about developing the Operating System.
As every coin has two sides, Open Source has its disadvantages too. Since any one can develop and publish Open Source resources, today we have a large repository of Open Source resources. But not many of them have proper documentation and support needed by the users.
Ultimately, it is the decision of end-user whether or not to use Open Source.

Sunday, October 6, 2013

AGILE


When working on a software development project, the methodology we choose plays a major role in the speed and quality of the project. But surprisingly many developers do not know which development methodology they are using. You do not have to take my word for it. In the State of Agile development survey conducted in 2011, 8% of the respondents answered “Don’t know” to the question, “What agile methodology you use?” So, let us see what the different agile methodologies are.
The basic philosophy of all agile methodologies is the same, iterative and incremental development. But from implementation standpoint, each has its own tactics and practices. Here are a few of the main agile methodologies.

Scrum:
Scrum is one of the most popular agile methodologies. The Scrum team consists of Product Owner, Scrum Master and Development Team. The Product Owner is the representative of stakeholders. He/she works closely with the team and communicates the user stories and prioritizes the system functionality. The development team is a self-organizing, cross-functional team which delivers potentially shippable increments of software at the end of each sprint.

Kanban:
Kanban methodology emphasizes on continual delivery without over-burdening the developers. The main principle of Kanban is to limit the amount of Work In Progress (WIP), which helps balance the flow-based approach so that the development team do not commit to too much work at once.

Crystal:
Crystal is one of the most lightweight agile methodologies. The key principles of Crystal are teamwork, communication, simplicity, as well as reflection to frequently adjust and improve the process. There are many flavors of Crystal such as Crystal Clear, Crystal Yellow, Crystal Orange etc.

There are many other agile methodologies such as Lean Software Development, Extreme Programming, Feature-Driven development etc. So, Which agile methodology are you using?

 References: