So having haphazardly fumbled through how Houdini actually operates it begs the question.
What can VEX actually do?
I'm glad you asked that:
It can read, write, cast and bind attributes to any of the 4 types of geometry level object
It can create new attributes
It can create groups and edit group membership
It can create and delete geometry level objects
Reference channel data
call an impressive library of built in functions that allow you to manipulate your geometry stream in very powerful ways (maths baby)
create user defined functions
create user defined data structures
define new node types!
Wow, that sounds amazing! I should use vex for everything right?
What can’t VEX do?
Create new nodes
Read most global variables directly
Use Hscript functions
Directly place data anywhere outside of the current geo stream
Interact with any other data streams
interact with the OS
Oh no, that's terrible, vex sucks right?
Well no, VEX is built for speed, to quote the Houdini docs:
VEX evaluation is typically very efficient giving performance close to compiled C/C++ code. VEX is not an alternative to scripting, but rather a smaller, more efficient general purpose language for writing shaders and custom nodes.
To put that into context Python is anywhere from 10 to 100 times SLOWER than compiled C++ when running over heavy data sets (for example a 1,000,000 point particle sim).
So it actually makes a lot of sense for Houdini to split the different types of task you want to do and give all the higher level fancy stuff to Python, things like building UI or building node networks or saving data out to disk, whilst giving all the low level geometry operations over to VEX which can iterate over huge data sets performing relatively complex mathematical
operations at very high speed.
Cool, take a deep breath, that's the boring stuff over, time to get vexxing!