bjnartowt said:
Hi everyone, I was wondering: is there a book out there that can show an aspiring-physicist how to become proficient with a computer? Namely: learning about file-types, how to get programs to "talk" to one another, using data-analysis "things" (?) like ROOT (the one that's C++ based), etc.?
I use the Windows operating-system, but I'm thinking of relying solely on Linux (when I get around to surmounting the learning-curve).
I'm not sure about linux but I'll share with you what I know about windows.
As far as getting programs to "talk" to each other there are a few technologies that allow this:
1) Object Linking and Embedding
This allows generic objects to be embedded from one software program to another program. Its like when you take a spreadsheet and embed it in a word document. Theres a whole standard on this and it will introduce you to a general framework of getting objects from one program and using them in another.
2) Component Object Model
This came after OLE and it can be fairly complicated but through its use of dynamic
interfaces and object definitions it allows software to be used like an object where more or less the software becomes like a "service" where its functionality can be access through the standard.
The newer platform which is .NET has standardized libraries and interfaces that allow fairly high level procedures to be written more quickly that can allow any program written in the .NET platform to respond and act to messages and events and due to the fact that software can be written to be compiled "Just In Time" or JIT you can get the same sort of advantages that Java offers by being compiled on the fly if need be.
There are actually quite a few ways of getting software to communicate to each other.
If you are going to learn about computer science you should take a course in Operating Systems. In this you should learn about processes and threads and its here where you will learn about how you can get two or more processes to share data. One way is using a pipe, another way is using a shared file but most boil down to using some location in memory which is process independent. The way processes are setup in operating systems is that they have their own address space that is reserved for them. Processes typically can't access other processes memory. However threads can typically access other threads memory in the same process.
If you're going to commit to learning C++ I would learn as much as you can about everything that's involved with programming including Operating Systems, Data Structures, Procedural Programming, Version control, as well as any applied programming that will help you get going from say the theory of signal processing or say solving an ODE or PDE to an implementation of Runge-Kutta solution to an ODE. If you're a physicist I will see you typically working on something more along those lines like say calculating FFT's than doing another Facebook clone. Typically many applied math courses have some form of programming but its typically not done in C++ usually a pre-existing package and framework is used that allows one to get results a lot quicker than having to write your own library up.
Also getting programs to "talk" to one another involves a great deal of attention to modern design techniques. Windows for example has a heap of examples where programs are talking to each other all the time. Even if you don't want to program in Windows I strongly recommend that you get a book on standards that have been introduced that talk about software being formed as a "generic service".
Theres just so much to learn but hopefully you can explore the surface and dig deeper when it becomes necessary. Good luck!