Why is delay(1000) breaking my serial communication?
NEVER use delay() in a loop - its a bad habit you get used to and then you return later on with complex code asking why nothing is happening or your webserver is dead for 10 seconds every time you receive a request.

So instead of 

void loop() {
  if(Serial.available() &gt; 0){
    Serial.println("Hello world from Ardunio!");
  }
  delay(10000);
 }


you would do

unsigned long timerStart = 0;
unsigned long myTimer = 10000;

setup(){....}

 void loop() {
  if(Serial.available() &gt; 0 ){
     if(millis() - timerStart &gt; myTimer){      // non blocking
       Serial.println("Hello world from Ardunio!");
       timerStart = millis(); // reset timer
     }    
   }
 }


What your code does at the moment is enter the IF clause if exactly in this millis the buffer is filled, then wait for ten seconds ignoring whatever you do. Next chance tohit and so on. Delay() is blocking processing => not a good thing todo in communication scenarios,