user81200: Im a complete beginner. Generally speaking, is there any need at all to have a delay in the main loop()? Im not used to writing infinite loops 
Is it correct to say that the delay() command is simply helpful for tutorials (i.e turn light on, wait, turn light off. wow!) but normally speaking a delay would not be helpful, and instead we are just rapidly infinitely polling our connected devices. Is that correct?
(I get that in some specialized cases it might be helpful to put a delay in the loop. Im not asking about the specialized cases.)

user70044: No, there is no need to use delay() at all. Unlike the sleep() or deepSleep() commands, delay does not save power or do anything else that's special.
The standard implementation of delay is just doing a busy-wait until the time has elapsed, something like:
void delay(int ms)
{
    int end = millis() + ms;
    while (millis() < end) {}; // do nothing
}

So for the CPU itself, this just wastes CPU cycles, it doesn't save any power.

user316: There is no absolute need for any Arduino program to use delay()
The blink without delay sketch that is included in the standard sketch examples is the canonical illustration of this.
In most cases you don't need to poll your sensors thousands of times a second. It is good discipline to only poll sensors as often as makes sense for the specific application. Sometimes this might be once every five minutes. For example an ambient temperature sensor. In those cases there is nothing to be gained be polling a thousand times a second. To do so wastes resources and is a poor habit that could be troublesome for battery powered applications.
For example, the use of millis() for timing allows you to effectively poll several peripherals each at different intervals, perhaps averaging some readings to reduce noise, perhaps also updating a display at other intervals that suit human perception.
For long running battery powered applications it is likely that you will benefit from finding out about putting the microcontroller to sleep using sleep() or deepSleep() and using interrupts to wake it. A real time clock (RTC) or the watchdog timer interrupt can perhaps be used to schedule your sensor readings and other actions, perhaps in conjunction with millis().
For very simple programs that don't need precise timings. delay() can be the simplest and clearest way to manage timings.

81200: <p>Im a complete beginner. Generally speaking, is there any need at all to have a delay in the main loop()? Im not used to writing infinite loops </p>
<p>Is it correct to say that the delay() command is simply helpful for tutorials (i.e turn light on, wait, turn light off. wow!) but normally speaking a delay would not be helpful, and instead we are just rapidly infinitely polling our connected devices. Is that correct?</p>
<p>(I get that in some specialized cases it might be helpful to put a delay in the loop. Im not asking about the specialized cases.)</p>
 70044: <p>No, there is no need to use <code>delay()</code> at all. Unlike the <code>sleep()</code> or <code>deepSleep()</code> commands, delay does not save power or do anything else that's special.</p>
<p>The standard implementation of <code>delay</code> is just doing a busy-wait until the time has elapsed, something like:</p>
<pre class="lang-cpp prettyprint-override"><code>void delay(int ms)
{
    int end = millis() + ms;
    while (millis() &lt; end) {}; // do nothing
}
</code></pre>
<p>So for the CPU itself, this just wastes CPU cycles, it doesn't save any power.</p>
 316: <p>There is no absolute need for any Arduino program to use <code>delay()</code></p>
<p>The <em>blink without delay</em> sketch that is included in the standard sketch examples is the canonical illustration of this.</p>
<p>In most cases you don't need to poll your sensors thousands of times a second. It is good discipline to only poll sensors as often as makes sense for the specific application. Sometimes this might be once every five minutes. For example an ambient temperature sensor. In those cases there is nothing to be gained be polling a thousand times a second. To do so wastes resources and is a poor habit that could be troublesome for battery powered applications.</p>
<p>For example, the use of <code>millis()</code> for timing allows you to effectively poll several peripherals each at different intervals, perhaps averaging some readings to reduce noise, perhaps also updating a display at other intervals that suit human perception.</p>
<p>For long running battery powered applications it is likely that you will benefit from finding out about putting the microcontroller to sleep using <code>sleep()</code> or <code>deepSleep()</code> and using interrupts to wake it. A real time clock (RTC) or the watchdog timer interrupt can perhaps be used to schedule your sensor readings and other actions, perhaps in conjunction with <code>millis()</code>.</p>
<p>For very simple programs that don't need precise timings. <code>delay()</code> can be the simplest and clearest way to manage timings.</p>
