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:
- Program is not running as expected. Make use of Debugger
- Making use of third party libraries. Today, we have library in every popular language for almost everything we need.
- Multiple persons working on same project. Using Version Control Systems.
- Project is growing big. Build Automation
- Lot of people started using your application. You need to port it to different platforms (operating systems/architectures). Need for Cross Compiliation
- I don't know why but we need Unit Testing Framework and/or unit tests
- 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?
- Please complete the
Project Flow
. I want to see what all things are involved. - 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:
Making use of libraries:
- Libraries are distributed in any of the following forms
- Source Distrubtion
- Static Libraries(*.lib for windows / *.a for linux)
- Dynamic Libraries (.dll for windows /.so for linux)
- .NET assemblies
- I don't know about java
Resources (Now, once I know the above info. I can search on my own for resources)
- Libraries are distributed in any of the following forms
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.