Williams attended Bowdoin College from 1893 to 1896. His professional career began in 1895 with the Lewiston ball club in the Class-B New England League. In 1896, Williams played for two teams; his previous club, Lewiston, and Fall River Indians. That season, Williams went a combined 14–16 with a 3.15earned run average, 28 complete games, and 86 strikeouts in 35 games, 30 starts. Williams also four games in the outfield and four games at first base that season. He batted a combined.312 with 29 runs, 43 hits, 10 doubles, three triples, one home run, and eight stolen bases in 138 at-bats. Williams moved on to the Class-A Toronto Canucks of the Eastern League in 1897. Although records were not kept in his first season there, in 1898 he went 16–14 with 26 complete games, and 70 strikeouts in 37 games, 34 starts. That season, Williams made his debut in Major League Baseball. Playing for the Washington Senators, Williams went 0–2 with an 8.47 ERA in 2 games, both starts. His debut with the Senators made Williams the first person from Bowdoin College to play in the majors. He returned to Toronto in 1899 and went 20–10 with 28 complete games, two shutouts and 54 strikeouts in 33 games, 30 starts. Williams was tied for third in wins that season in the Eastern League. Williams played with the Toronto team until 1901. In 1901, he went 16–13 in 34 games.
Chicago Cubs
Williams joined the major league Chicago Orphans in 1902. He went 11–16 with a 2.49 ERA, 27 complete games, and 99 strikeouts. Williams was tied for eighth in the National League in both losses and home runs per nine innings that season. Williams was re-signed by the Orphans, now renamed the Chicago Cubs, for the 1903 season. He did not join the Cubs in spring training that season as he was coaching the Bowdoin College baseball team. With the Cubs in 1903, Williams went 0–1 with a 5.40 ERA in one game, a start.
Later career
In April of the 1903 season, the Philadelphia Phillies purchased Williams from the Cubs. His tenure with the Phillies proved short, however, as after two games with a 1–1 record and a 3.00 ERA, he was released. As a free agent, Williams signed with the Boston Beaneaters. In ten games, he went 4–5 with a 4.12 ERA, nine complete games and 20 strikeouts. All of his games were for starts. On the season, Williams went 5–7 with a 3.99 ERA, 12 complete games and 30 strikeouts in 13 games, all starts, between Chicago, Philadelphia and Boston.