As per http://developers.marketo.com/rest-api/lead-database/leads/
There are two API
1) Create and Update
2)Push Lead to Marketo
input difference - program id for create required while program name required for push
What is difference between this push and create?
The differences should be clear from their signatures and the comments in the docs.
Push includes a Reason, which is very handy for constraints and filters; its way of locating the program may save you an API call (though it'salso more fragile because names are not immutable).
Neither method is particularly awesome nor grossly flawed. The question, as with all software design, is what you're trying to accomplish.
As both the method are used for same purpose.. ie for creating leads on marketo side...which creates some sort of confusion which one to use .
I will have to use as per my software design, while mutable behaviour of names will definitely have to consider.