views:

59

answers:

1

Somebody please re-tag with appropriate tags

Hello,

This is my story but I guess it holds true for all programmers.

We begin programming with some simple Hello World program. We practice & add functions/classes to the program. But they still maintain the Hello World style. function calling some other functions standard library.

But when it comes to real world projects(I'm just familiar with OpenSource). Lot more other things come into picture. Then begins the hardships of this newbie programmer.

Project Flow:

  1. Program is not running as expected. Make use of Debugger
  2. Making use of third party libraries. Today, we have library in every popular language for almost everything we need.
  3. Multiple persons working on same project. Using Version Control Systems.
  4. Project is growing big. Build Automation
  5. Lot of people started using your application. You need to port it to different platforms (operating systems/architectures). Need for Cross Compiliation
  6. I don't know why but we need Unit Testing Framework and/or unit tests
  7. What else???

The problem in this is the lack of knowledge of this newbie programmer about existence of these things.

What I mean is when I started looking into some real world projects(Opensource). I didn't know what is this? and why we need to do this?

$./configure
$make
$make install

Recently I became aware of the keyword "Build Automation". I was in need of some library which was available for linux but I needed it in windows. I didn't know that its called "Cross compilation" and tools like MinGW/MSYS exist for this purpose. I had to learn these things in the hard way. I wish some one has told me about existence of such things. That would have saved my lot of time.

Today I ran into performance problem and was feeling the need for something. I guess the thing I'm looking for is Profiler. Thanks to my involvement in opensource projects. Even though I didn't realized/felt the need for this, I'm aware of term Unit Testing.

Though this (hard)way of learning things has some big advantages like now, I'm able to figure out solution or some unknown thing very quickly & unlike my other friends I don't get struck at any point. But I hate the wastage of time involved. You do not believe how much I time I wasted in figuring out the Makefiles & Gnu Build System

So, what am I looking for this in this post?

  1. Please complete the Project Flow. I want to see what all things are involved.
  2. For each of the tasks in the Project Flow list. I want to see following information.
    • Most popular solutions/tools availabe.
    • Wikipedia list to all alternatives.
    • [optional] Suggest some good books/tutorials/guides for learning about this. Or link to relavent SO posts/tags.
    • I know somethings are language & OS specific. I would say we have only handful of major platforms Linux/Unix, Windows, Java, .NET and handful of major languages C, C++, Java, .NET, Python. Address these languages. Its more than sufficient.

Example:

  1. Making use of libraries:

Note:

Please not that I'm not asking to suggest info on how to learn each of these things. I'm asking about what more such kind of things are involved and alternatives for each of them.

A: 

Your question seems to be too broad, but in comments you asked for examples of different methods. This would at least enable you to find some other pointers and make your own decisions.

  • Rational Unified Process (RUP)/Unified Process (UP)
  • eXtreme Programming (XP)
  • Scrum
  • Test Driven Development (TDD)/Behaviour Driven Development (BDD)
  • Lean Software development
  • Kanban
  • Feature Driven Development (FDD)

Those and many more are software development methods, which comprise of different principles, processes and roles. Most of them also come with some sets of practices for different purposes, e.g. ones you mention in your question. Those are quite widely used in real world, although many companies use different combinations and also some own processes and methods. What is not part of what is used so widely, but might give you some interesting views on development are formal methods, which are precise, but most of the time too unpractical.

Gabriel Ščerbák