Sunday, August 21, 2011

Some thoughts on software engineering

Software engineering is more focused on team work rather than solo coding. Of course a person can develop a software himself applying the software engineering rules, but in most cases, we need to work with other people.

Working with other people improves the productivity (in an ideal situation) but also brings many issues. One thing we concern about is how to divide the work. If we want everyone to write a piece of code that is able to be integrated and works, we need to plan the tasks well. Therefore we need a leader (or an architecturer) to make a good model of the software. How good the model is? Well, I think it depends on how easy it is to distribute the work to programmers and whether each programmer can test his code without knowing others' code. This can be concluded as "low coupling", which is important for managing complexity. Another issue is about communication. Team members should know what each other is doing. This can minimize misunderstanding so there is no repeated work and the whole progress can be evaluated. On the other hand, the communication is also in the code. Good code quality and sufficient comments may help other members know how your code works therefore there is less chance to call your code wrongly and let the whole system crash.

The software development on evoloving platform is different from the traditinal one, i.e. the waterfall model. Developing applications for platforms like Facebook is more like a flow of the following processes. First we need to have an idea. The idea may be initially very simple but can evolve into some complex ones later, which we call features. The first two processes are very important since it almost determines the rest length of the development cycle. Then it's time to implement it, test it and finally release it. Deploying the application is not the end because each iteration is relatively quick and simple. The development is driven by user requirements. After getting the feedback for the first interation, we may plan new features or modify existing features and restart the cycle again (if the application is not dying).

No comments:

Post a Comment