Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Being a computer scientist in a research field I am often tasked with working alongside professionals outside of the software domain (think math people, electrical engineer etc), and then translating their theories and ideas into real-world implementations. I often find it difficult when they present a theoretical problem which appears to be somewhat disconnected from reality. I am not saying that the theory is bogus, only that it is difficult to translate into real-world situations.

For example, recently I have been working with software defined radios. We are exploring many different areas, but often the math specialists in my group would present a problem which is heavily grounded in theory (signal processing, physics, whatever). I often struggle at times where it is hard to draw direct parallels between the theory and the real-world implementation that I need to develop. Say we are working on an energy detector, the theory person in my group would say "you need to measure the noise variance with no signal present." This leads me to think "how the hell do I isolate noise from a signal in reality?" There are many examples, but I hope you see where I am going.

So, my question is how does one deal with implementation of theoretical concepts when the theory seems detached from reality? Or at least when the connections are not so clear. Or perhaps, the person with the 'theory' may be ignorant of real restrictions?

Note: I found this to be a hard question to ask - hopefully you are following me. If you have suggestions on how I could improve it, by all means let me know!

Thanks for looking!

EDIT: To be a bit more clear, I understand in situations like this that I must learn that specific domain myself to an extent (i.e. signal processing), but I am more concerned with when those theoretical concepts do not appear to be as grounded in practice as one would like.

share|improve this question
4  
You're a CS researcher and you can't deal with abstract, mathematical models?? WTH did you do research in? –  Crazy Eddie Feb 15 '11 at 17:19
    
In theory, it's simple. In practice ... No, seriously. You just need to bridge the gap, which you made the first step to by asking the question about how to measure noise. With any luck, the answer to it will be sufficiently close to reality to implement. If not, ask another question and so on. –  biziclop Feb 15 '11 at 21:31
1  
"You need to measure the noise variance with no signal present..." Does it make sense after you read this? biomecardio.com/matlab/evar.htmlhttp://www.mathworks.com/… Here instead of "y = cos(t/10)+(t/50);" you would use something like "y = t * 0;", I think. Then port this matlab goodness into SciPy, because SciPy is so freaking awesome! I found this out by searching; hopefully this makes sense. Did I misunderstand the part that you were struggling with? Maybe this was just an example ... and not a great one. –  Job Feb 15 '11 at 23:17
    
Yea, I'm beyond that now. I'll update the question again for clarity. –  Mr. Shickadance Feb 16 '11 at 0:37
add comment

7 Answers

up vote 1 down vote accepted

So, my question is how does one deal with implementation of theoretical concepts when the theory seems detached from reality? Or at least when the connections are not so clear. Or perhaps, the person with the 'theory' may be ignorant of real restrictions?

Enlighten them. Explain to them the restrictions you're encountering. The great thing about math theorists and engineering theorists is once you explain your limitations to them and what you are trying to do, they can translate to the theory they love. You can't expect them to read your mind and work out all the different details specific to your situation. Similarly, they do not expect you to immediately grasp everything they're theorizing about (see point below)

To be a bit more clear, I understand in situations like this that I must learn that specific domain myself to an extent (i.e. signal processing), but I am more concerned with when those theoretical concepts do not appear to be as grounded in practice as one would like.

I think this is pretty instance-specific. Many, many, theoretical concepts that I didn't see fitting with practical reality turned out to be fully grounded in practice. Furthermore, theorists (mathematicians, and engineers) usually have a better idea of how things work than the people actually developing the product or putting the theory into practice - the theorists just start out with an ideal example and narrow it down as much as possible from there. That's my second point. Ask lots of questions. If something doesn't appear to be grounded in practice, ask to know more about it. Explain what your goal is and ask if what they're talking about can be applied to that. Help them do some of the work for you, and you'll both be better off because of it. (Much of the time when I assumed theory wasn't grounded I simply did not know enough about it. Asking questions really helps)

Thats where my problem is...when I ask for their input what I get doesn't always seem to be easily translated into practice. I know my job isn't going to be easy, but how do I know that I need to explore other options? Experience? For example, if I am given an algorithmic approach only to decide that a heuristic one better suits the problem.

Are you a RCG (recent college graduate)? If so, welcome to the real world! Or, if you're new to being a research scientist (or working with them), welcome! Contrary to what you're taught in school, real solutions are not easy. They're complex, gritty, amazingly innovative. They take time to develop and aren't out-of-the-box pre-assembled cookie-cutter (you get the drift?) solutions.

I think you know that already, and I think you know what you need. You already mentioned one thing: experience. That will come with time. Depending on your work environment it may be beneficial to find someone who has walked the path before, who can mutually identify with you and your dilemma. Also, be sure to ask questions and provide input. Converse with the theorists about ways to translate the stuff on the blackboard to what you need to get done. Once you engage others in your problem, with the intent to learn and solve, you'll find yourself having a much easier time dealing with much more difficult problems.

Hope that helps (from a past-and-current researcher, and industry guy)

share|improve this answer
    
Thanks for the response! Yes, I am new to the field. I know that my lack of experience can certainly contribute to this 'dilemma', but I just feel as though sometimes there is a disconnect between the scientists/engineers and myself. I didn't want people to interpret this as "how do I code without exact instructions?" I think its mostly a case of me being thrown into some very new material and moving along at a rapid pace. That, and the fact that what I am saying is at least a little bit true. –  Mr. Shickadance Feb 16 '11 at 4:46
    
@Mr. Shickadance: I'd say most, if not all, of what you mentioned is spot-on. I used to work with theoretical (and practical) biologists, and (very theoretical) mathematicians. Getting everyone to be on the same page was a major undertaking, and good, frequent, communication was essential. Very rarely would any of us immediately understand the big picture and how to get theory grounded in reality. –  aqua Feb 16 '11 at 4:50
add comment

In theory, theory and practice are the same. In practice, they are not.

share|improve this answer
    
Wait... what did you say? :-) –  Dynamic Sep 20 '12 at 10:24
add comment

I work with actuaries. There are lots of things they ask for that don't exist in the econometric data sets we have available.

Lots of theory, disconnected from practice.

I feel your pain.

Here's what I do: Pitch an Idea

Rather than discuss it too much, I do what research I can, build a "technology spike" implementation and send them the results. It's a "pitch" and it's completely concrete.

Rather than get bogged down in technology, performance, and related imponderables, I just use Python so I can

  1. Build quickly.

  2. Refactor quickly.

  3. Rebuild quickly.

In short, all software is just a "pitch" to see if it's going to work. Eventually some things settle down and require a bit more refined implementation.

Most things don't settle down.

Why? Why is this so hard?

Easy. They don't know, either. Until I actually pitch an idea, they have only slightly more clue than I do how it will work out. After pondering my results for a while, they have "corrections". They're not "bugs" since no one knew what the requirements were in the first place. They're really just a next step in evolving from pure theory to pure practice.

share|improve this answer
    
This is what I was trying to get at. Your last paragraph resembles my situation. They give me ideas, then I usually come back and say "how does this look?" (in reference to the 'pitch') –  Mr. Shickadance Feb 15 '11 at 17:05
    
@Mr. Shickadance: That's all you can ever do. Remember, they don't know much more about the implementation than you. The "waterfall" model of software development, where you gather all the requirements and do all the design is a big fat lie. –  S.Lott Feb 15 '11 at 17:20
add comment

You need to find out what they are talking about. Whether that means asking questions, doing research, or taking a class, you have to be able understand them. It really isn't any different from any other IT field that deals with clients.

Most people will not mind you asking them how and why questions. You do need to avoid offending them by asking from a position of authority, though. They are the ones that know what the requirements are, and in your case, are definately experts. Ask for formulas or pictoral representations of what they are trying to communicate. Have them walk you through an example problem. I work in insurance, and I learn how to hand-rate policies. I don't think I would be able to program here as well without that experience.

As you work with these clients more, you will learn how to communicate to each other better.

share|improve this answer
add comment

A good starting point would be to get some 101 kind of books, course materials etc on the domain you are working on. Ask your colleagues for more help here.

The next thing to do would be to check out github, sourceforge et al to see if there are any relevant open source projects in the areas you plan to work on. If yes, check out the algorithm implementations -- hopefully they should help.

Yet another suggestion is to figure out other programmers who work in relevant field and see if they have any posts or links to share. Often programmers have twitter accounts and/or blogs relevant to their field of work and you can always pick things up from there.

share|improve this answer
add comment

Since your colleagues are obviously scientifically oriented, you should be able to ask them what the relevant algorithms or mathematical formulas are. From there you can plug in some numbers and ask whether your approach makes sense.

For hardware-related stuff you could simply ask if they know of a device which can do something similar, then what modifications they would need to make it useful in the specific situation.

share|improve this answer
    
Thats where my problem is...when I ask for their input what I get doesn't always seem to be easily translated into practice. I know my job isn't going to be easy, but how do I know that I need to explore other options? Experience? For example, if I am given an algorithmic approach only to decide that a heuristic one better suits the problem. –  Mr. Shickadance Feb 15 '11 at 16:44
add comment

To isolate noise take a sample with only noise no signal, then the sample you want and subtract. You may have to do a Fourier transform first. Digital signal processing is a well established field, so you may want to hit the library.

share|improve this answer
    
I should have explained more...we were discussing ways of automating the whole process. So, how would you sample noise and know that there was no signal present? It's easy if your looking at the FFT plot, but how do you program that? I am not looking for an answer, that was just my example. FYI we have moved beyond that problem anyway. –  Mr. Shickadance Feb 15 '11 at 16:41
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.