Is it really true that something is better than nothing?

They say that something is better than nothing. To some extent even I don’t disagree with this statement. But sometimes, you might end up collecting a lot of that ‘something’ which may not serve your purpose at all. You might end up collecting so much useless information and advice that you will actually feel that actually ‘nothing’ is better than lot of useless ‘something’. When we say that time is important, we should make sure that we save ourselves from these useless ‘something’ and focus on things that we really need.

Being a software application developer, I would like to consider what happens in a typical software industry. What is expected from a software project is nothing but working software. But still, most of companies end up using so called ‘up front’ design approach. In this approach lot of time is spent in designing E-R diagrams or UML diagrams including text documentation. Here, I’m not saying that documentation is useless, but considering the effort that is required to change them once the requirement or design decision is changed, it does feel like a big waste of time. There is another approach in developing software known as Test Driven Development (TDD). In this approach, unit tests are written before the code that implements the required functionality. These tests are written such that:
1. They explain the function of unit under the test
2. The broken functionality is identified automatically as soon as possible

Text based documentation can serve the purpose stated in point 1 but fails to identify broken functionalities automatically. Thus it’s better to have unit tests than to have documentation in text.

Similarly, in case of online forums, threads are created asking for help. But most of the time I see replies like “Yes I agree” or “Wow!!! That was great”.  I have seen replies that advice the creator of the thread to search Google for more information. Such replies don’t add any real value to the owner of the thread or to other readers. If you want to give your opinion then make sure that you also add value to the thread by recommending your own solution. This way, every reply to a thread will improve the discussion further.

Another case I would like to consider is the case of websites which are created only to make money. Such websites are known as virtual real estates and use PLR articles as content. This leads to hundreds of websites having similar content floating in cyberspace. Another fact is that, most of the time such websites are created by people who knows nothing about the topic. The articles are mostly ghostwritten or taken from PLR sources or article directories. Google knows that such duplicate content doesn’t add any value to internet users and thus, hides the results containing duplicate information.

Whatever may be the case or purpose, we should remember that whatever we do, even if it’s little, should add value to our work. Something is better than nothing holds true only when that ‘something’ has a value and not otherwise.

Why software projects fail?

Developing of software project is not just a task related to computer programming. Software development involves of lot planning, understanding of requirements, proper design, maintainability and of course, programming. As software planning involves so many tasks, it should be very easy to guess that software projects don’t fail just because of wrong programming, but mostly because, other tasks involved in software development are not handled properly. Recently, I got a chance to review some projects that are being developed in one educational institute in Goa. In this article, I will try to look at some faults that will eventually render these projects useless practically.

Database security: One of the projects developed inside the institute is to get the marks of students and prepare the report of failed students. The application is totally window based program developed in C# which connects to the central database. User need to start the program, login with his username as password, enter the marks for students and create report based on it. Looks like a perfect piece of software. But there is one major security loophole.

Management feels that the software is quite secure as no one can enter or change the marks unless the user logs in with his username and password. The biggest fault being overlooked here is an access to the central DBMS. The connection string required to connect to the central database is stored in a ‘application_name.exe.config’ file which is present in the same folder where application is installed. In other words, this simple text file is installed on every single client machine and any user can read it. Any student can directly login to the central database using the username and password mentioned in the connection string, and can change his marks or delete all records.

This problem could have been easily handled by creating a web service to handle the database tasks and by making the application use this web service. In this way, the connection string would have been in the ‘web.config’ file on the central server and away from any third party access.

Password storage: Care should be taken while user information is stored in the database. User sensitive information should be stored as securely as possible. This is one reason why normally people use MD5 to obtain the hashed password which is then stored in the database. MD5 is one way hash and it is not possible to obtain the original password from hash. People normally keep the same password for different accounts. For example, an user can have same password for his Gmail as well as Yahoo mail account. If the password is stored directly, an administrator having access to yahoo mail’s central database can easily obtain the password of the user and hack his gmail account.

There is another project being developed called inventory management system for the departmental stores. Here, the lead person wants the password not to be hashed but to be encrypted so that it could be retrieved back. Clearly, there is a big security loophole.

Improper use of software development concepts: Software could be programmed either in procedural way or in object oriented way. The program is being written in objected oriented language like C# doesn’t mean that program is object oriented. Program becomes object oriented when the whole program is designed using classes such that there is code reusability along with use of abstraction. Care should be taken that internal structure of class is not exposed. When software is developed in this way, it makes code more maintainable and extendable. Handling of bugs becomes much easier this way.

However, the lead person who is in charge of inventory management system wants the system to be developed neither in procedural nor in object oriented way. He wants to use something that he calls as “Hybrid” way of software development. I have never heard or seen any projects developed in this way. If someone knows, please let me know.

Software programming could be an easy task, but software development is definitely not an easy task. It needs lot of effort to design a software application and plan its development. Care must be taken while developing applications where security is going to play a key role. We should keep our mind open to learn from others mistakes and also from the approach followed by successful software developers. It takes time and hard work to develop a software application and thus, it’s the responsibility of every person involved in the project to develop it properly. Software should be designed to survive and not to fail.

How to learn computer programming?

I’ve seen lot of people asking questions on exactly what they should do to learn computer programming. Well, there is no single answer for this question as computer programming is more than just learning a programming language like C and Java. I have seen some people recommending books on C/C++ etc. while some people believe that books cannot teach computer programming. In this article, we will see how a person can learn computer programming.

As I have said before, computer programming is lot more than just learning a programming language. Learning a programming language is nothing but learning its syntax and the constructs provided by that particular language. It is like learning different words in English like ‘cat’ or ‘sky’. You cannot speak in English just by knowing different words and their meanings but you also need to focus on grammar. After learning grammar, you actually need to speak in English with other people to get comfortable with it. Learning computer programming is also quite similar.

To learn computer programming, you first need to select a language, which is easier to use and learn. The first computer language that I used was BASIC and then PASCAL. I have seen many people recommending Python these days and I agree with them. Anybody can learn python quickly. However, there are many other languages, which you can use to start with.

After selecting the language, spend some time and go through its syntax and example provided for each. At the same time, try out those examples on your computer to understand how each function or syntax behaves. Keep on practicing until you get comfortable with the language syntax and its use. Before moving on to next steps, make sure that you are very comfortable with the language.

By this time, you will know how to use a language. Keep in mind that knowing how to use a language does not mean that you know computer programming. Computer programming is a way to teach computer how to solve a particular problem. Before learning how to use your language for solving complex problem, you need to learn how to use the language to solve basic problems (like sorting, searching) and how to manage data (data structures).

There are many books available, that will provide you with basic algorithms and will teach you about data structures. Learn those concepts and try to implement them in your language. In this way, after solving lot of examples you will see that most of the problems are solved by using simple concepts. At this stage, you can say that you have learnt computer programming. But wait, that’s not an end. There are many different ways to solve a particular problem and only experience can teach you which one is the best. Therefore, you need to keep practicing.

Remember, that learning computer programming takes lot of time and effort. Its not something that could be learnt directly from books. Even after learning computer programming, you need to practice it regularly with different problems. There are many open source projects, which you will find on the net. You can learn more by looking at their source codes. You can also try to participate in the development so gain more experience.

So keep learning and practicing. That is the way to learn computer programming.