Reverse Engineering?

Can a good programmer tell how someting should work from a programs source code?

I’m not talking about doing this to proprietary software, 'cause that would be wrong of course :wink:

But for open source software, can a good programmer understand an application better from the source code out? :confused:

If the code is readable and the programmer has the knowledgde and time to read – basically yes.

But: Software mostly is too big to be written by a single person. It is even much too big to be fully read and understand by a single person. You typically pick out the parts you are interested in. “Pick out” can be a hard task. And then you need profound knowledge of each the materiae the software is about and software engineering (including knowledge of the used language).

Software is better readable if it is commented well.
It looks like commenting doesn’t pay off (I don’t fully agree – software can be maintenanced better if commented well; so if your business includes maintenance commenting may pay off). In commercial software in money, in open source software in lust and appreciation. So don’t expect well commented code. (Basic libraries are typically commented better, end user applications worse.)

Commented software is so much better. For if you ever decide to look back you know what each piece of code is doing & or if someone else looks at your code they know what its doing. Generally Open Source code is well documented as so many people look at it, it needs commenting for the program to last.

From my own experience: When I was preparing development of plugins for Blender Game Engine, I studied blender source code a lot and it helped me to undestand its internal architecture.

The best approach is to use proper tools - using reverse-engineered apllication, reading its source code, testing changes in its sources and debugging it.

A good programmer could and does, assuming enough time and patience to ‘digest’ the code.

From my experience, it helps to have a basic idea of how the program reacts or what it does when it is run. Secondly, it would help to focus on one particular area of the program. Then, you would go through the source, until you find an entry point, and follow the code from there…

Aligorith

Why on earth would you reverse engineer open source software? The whole idea of open source is that the source code is open, I.e. files are offered for download, fully accessable in the language it was made with (and i would asume it has the coder’s comments too)

Reverse Engineering is done you don’t have some data you want. But like it was said, if it is open source, it is all there!

Comments in the code are not the only thing. A general documentation which represents the static and dinamic structure of the software is important. But it usually is done only for not small projects.

as soon as i read this i was like uhh OPENSOURCE! download the source.

i guess a few others had the same idea.

It’s very difficult to reverse engineer most programs because of the wide variety of compilers and platforms. Things that reverse engineer or decompile quite well are things like Java programs.

But even then, the generated code doesn’t always use the original names so it’s not as readable.

Looking at the code definitely helps you understand how it works. For example, if you look at the Renderman Shading Language, it’s easier to see how computer graphics programs work.

Looking at a program’s entire code might just be confusing though if it’s a big program. Blender for example is pretty big.