Milanese del quartiere di Affori e soprannominato Pippo, giocò come attaccante e mezzala. Cresciuto nelle giovanili del Milan, non esordì mai in prima squadra e giocò nelle serie minori, prevalentemente con varie squadre di Serie C[10].
Dal 1968 fu vice di Nils Liedholm e Luigi Radice sulla panchina del Monza; la sua esperienza di primo allenatore iniziò al Verbania nel campionato 1970-1971, in Serie C, dove restò due anni ottenendo come miglior risultato un sesto posto, che rimarrà il secondo miglior traguardo raggiunto dalla società del Verbano in cinquant'anni. Con l'Alessandria arrivò terzo e vinse inoltre nel 1973 la prima edizione della Coppa Italia Semiprofessionisti. Al termine di quella stagione passò al Como, in Serie B, restandovi per un biennio. Dopo il quarto posto della prima stagione, nel 1974-1975 centrò con i lariani la promozione in Serie A.
Nel 1975-1976, alla prima esperienza in massima categoria, ottenne con il Cesena una storica qualificazione in Coppa UEFA: questo traguardo gli consentì l'approdo a una grande squadra, il Milan. L'esperienza alla guida dei rossoneri, nel campionato 1976-1977, durò fino alla fine del girone di andata in quanto venne esonerato. Scese dunque in B, tornando a Cesena: Nell'annata 1979-1980 ottenne la promozione in A con il Como, con cui rimase fino alla quindicesima giornata della stagione 1981-1982 quando venne sostituito da Gianni Seghedoni[11].
Ad agosto del 1982 venne chiamato alla guida dell'Avellino, in A. Per lui fu la prima esperienza da allenatore al Sud, ma viene esonerato dopo 5 giornate in cui raccolse una vittoria, un pareggio e tre sconfitte. Nella stagione 1986-1987 allenò il Barletta, guidando la società pugliese alla vittoria del campionato di Serie C1 e quindi alla disputa, l'anno successivo, del primo campionato di B della sua storia.
Nel campionato 1987-1988 guidò un'altra squadra pugliese, il Foggia, in C1, con cui affrontò in un quadrangolare amichevole anche il Real Madrid: la partita terminò 3-1 per i Blancos ma il Foggia salì alla ribalta nazionale, in Italia e Spagna, per il gioco espresso che mise in seria difficoltà i blasonati madrileni. Nella stagione 1988-1989 fu chiamato alla guida della Reggiana, in C1; condusse gli emiliani per sei stagioni, guidando la società alla vittoria del campionato di B nell'edizione 1992-1993 e alla sua prima promozione in massima serie. Esonerato dal club granata nel 1994, dopo una serie di altre esperienze, tra cui la guida del Genoa nell'annata 1994-1995, si distaccò dal mondo del calcio dopo 7 partite alla guida della Unione Sportiva Triestina Calcio 1918 per le gare dalla VII alla XIII giornata del campionato di Serie C2 girone A della stagione 1997-1998 [12].