A nesC programozási nyelv valójában a C nyelv kiterjesztése, ezért ezen leírás csak a nesC nyelv sajátosságaival foglalkozik.
Arra tervezték, hogy megtestesítse a TinyOS végrehajtási modelljét.
A TinyOS egy esemény-vezérelt operációs rendszer, amit elsősorban hálózatban együttműködő érzékelőkhöz terveztek.
Ezeknek az érzékelőknek rendkívül kicsike erőforrásaik vannak. Ehhez illeszkedik a TinyOS és a nesC szerkezete is.
A TinyOS komponensek nesC-ben vannak megírva.
A TinyOS-t először a U.C. Berkeley EECS Department kezdte fejleszteni, később kialakult egy internetes fejlesztőközösség.
A nesC-t szintén a U.C. Berkeley EECS Department fejlesztette ki.
A nesC kódot .nc kiterjesztésű fájlokban helyezzük el, de C fájlok is kapcsolhatóak egy alkalmazáshoz. Egy nesC program lényegében összekapcsolt komponensek egy halmaza (vagy inkább gráfja). Ezek a komponensek kétfélék lehetnek: modulok vagy konfigurációk. A modulok az alap-komponensek, míg a konfigurációk más komponensekből felépített „összetett” komponensek. Egy program voltaképpen egy nagy komponens. Ez általában egy konfiguráció, amelynek vannak részkomponensei, amelyek közt lehetnek konfigurációk is, amelyeknek szintén lehetnek részkomponensei stb. Három fontos függvényfogalom van a nesC-ben: parancs (command), esemény (event) illetve a taszk (task). A nesC-ben írt program egyes komponensei irányítanak más komponenseket (pl. egy fő komponens irányít egy hardver feladatokat ellátó komponenst); ezért egyfajta hierarchia alakul ki a program komponensei között. A hierarchia nem egy egzakt fogalom, csak egy jellegzetes arca a nesC programoknak. A parancsok arra valók, hogy egy, a hierarchiában magasabb szinten elhelyezkedő komponens utasításokat adjon egy, a hierarchiában lejjebb elhelyezkedő komponensnek, míg az eseményeket arra használjuk, hogy a lejjebb lévő komponens jelzéseket küldjön a feljebb lévő komponensnek. A komponensek összekapcsolása (huzalozása) lényegében azt jelenti, hogy megmondjuk a komponenseknek, hogy ki melyik másik komponens parancsát vagy eseményét hívhatja meg. Ha úgy gondoljuk, hogy egy feladatkörhöz hasonló parancsokat és eseményeket használunk fel, akkor ezeket becsomagolhatjuk egy interfészbe, amelyeket így könnyebben tudunk használni legközelebb is. Egy .nc fájlban vagy egy interfész-definíció(pontosabban interfész típus definíció), vagy egy modul, vagy pedig egy konfiguráció van elhelyezve. Ezek elé beszerkeszthetünk C fejállományokat is. Minden programban kötelezően szerepelnie kell egy Main nevű komponensnek. Ez az indító- és vezérlőkomponens. Ennek a komponensnek van egy ütemezője, ami a taszkokat ütemezi. A taszkot arra találták ki, hogy időigényes de nem sürgős számításokat végezzen. Elindításkor bekerül a Main ütemezőjébe, és akkor használja az erőforrásokat, amikor nincs más, pillanatnyilag fontos feladat, azaz nem kell parancsot vagy eseményt végrehajtani.