同年の第一回プロ野球ドラフト会議で広島カープに4位指名され投手として入団。しかしいきなり腎臓病を患い入院し、1年目の日南キャンプは不参加。以来、ジンちゃんの愛称で親しまれる。同年オフ、当時のヘッドコーチ・石本秀一に勧められ野手転向。当初は三塁手で起用されたが、守備に難があり外野手に再転向。しばらくは二軍暮らしが続き戦力外リストに入ったこともあったが、上田利治・関根潤三各コーチらの指導により1970年に一軍定着。翌1971年には1番左翼手としてレギュラーに起用。打率.283を打ってリーグ打撃成績3位に入り、外野手としてベストナインに選出される。その後、ジム・ヒックスの加入もあり一時出場機会を減らす。1975年には規定打席不足ながらレギュラーではチーム2位となる打率.285を挙げて広島の初優勝に貢献。優勝を決めた巨人戦ではウイニングボールを掴んだ。同年の阪急ブレーブスとの日本シリーズでは、前半3試合に左翼手として先発するが、シリーズ通算8打数1安打に終わる。これ以後は主力打者として活躍し、1976年から1978年にかけて広島球団としては初となる3年連続の打率3割をマークすると共に、特に1978年は球団記録となる打率.348で首位打者のタイトルを獲得している。翌1979年から1980年にかけての連続日本一にも貢献。1979年の近鉄バファローズとの日本シリーズでは2本塁打を放ち優秀選手賞を獲得。1980年の近鉄との日本シリーズでは3本塁打、うち第6戦では1回に先制の満塁本塁打を放つ。山本浩二や衣笠祥雄らとともに赤ヘル黄金時代を担った。その後もジム・ライトル、山本浩二とクリーンナップを組んで5番打者として活躍するも、チームが4位に終わった1982年オフ、球団フロントとの確執から加藤英司との大型トレードにより阪急ブレーブスに移籍する。移籍初年度の1983年は新外国人のブーマー・ウェルズを差し置いて4番・指名打者を任され、自身初の130試合フル出場を果たす。打撃も好調で、初のシーズン30本塁打となる36本塁打に114打点を記録。打点王を獲得した。しかし、1984年のロッテオリオンズとの開幕戦で、土屋正勝から頭部に死球を受けて左側頭部骨折・三半規管損傷の重症を負い、長期欠場を余儀なくされる。同年夏に復帰し後半戦の63試合に出場するも、頭痛、吐き気、めまい等の後遺症に苦しみ打率.181と低迷した。翌1985年5月には後遺症の徹底治療のために埼玉医科大学附属病院に入院するが、無類の勝負強さを誇った打撃が甦る事はなく、同年のシーズン終了後に現役を引退。結局最後の2シーズンは不本意なまま現役を終えた。
Erlangの主な特長は、並行処理のサポートである。Erlangにおける並行処理は、複数の「プロセス」を生成し、それらの間で通信を行うための、簡潔で強力な機能群によって支えられている。なお、Erlangが提供する「プロセス」は、オペレーティングシステムが提供するプロセスやスレッドとは異なり、Erlangの仮想機械(VM)によって管理される。「プロセス」の生成オーバーヘッドは約300ワード程度に抑えられており、大量の「プロセス」を、性能を低下させずに生成できる。あるベンチマークでは2000万個の「プロセス」を並行実行できることが示された。これ以降の記述ではErlangにおける「プロセス」を括弧無しで言及する。Erlangにおけるプロセス間の通信は、非共有かつ非同期のメッセージ転送システムによって行われる。Erlangのプロセスは全てそれぞれの「メールボックス」をもつ。メールボックスには他のプロセスから受信したメッセージが格納される。その後、メールボックスに格納されたメッセージがメールボックスを所有するプロセスによって処理される。そのときErlangのプロセスはメッセージを得るためにreceiveという基本操作を行う。メッセージを得る過程ではパターンマッチングが行われる。まずメッセージ制御ルーティンが1番目のメッセージに対して各パターンがマッチするかどうか調べる。2番目以降のメッセージに対しても同様のことを行う。マッチングは、マッチするメッセージに出会うまで行われる。メッセージが処理されると、メッセージはメールボックスキューから除去され、プロセスは復帰して続きの処理を行う。Erlangの構成要素は何であれメッセージとして使うことができる。Erlangの基本要素である整数、浮動小数点数、文字、アトムも、またタプル、リスト、さらには関数さえも、メッセージとして扱うことができる。ソースコードの例を示す。  Pid=spawn(Mod, Func, Args)       % execute function Func as new process  Pid=spawn(Node, Mod, Func, Args) % execute function Func in remote node Node   Pid ! a_message      % send message to the process (asynchronously)   receive              % receive message sent to this process    a_message -> do_something;    {data, Data_content} -> do_something_else();% This is a tuple of a type atom and some data    {hello, Text} -> io:format("Got hello message:~s", [Text]);    {goodbye, Text} -> io:format("Got goodbye message:~s", [Text])  end.Erlangでは異なるノード (コンピュータ) に分散した複数のプロセスを互いに連携させて動作させるためのサポートも組み込みで備えている (分散処理) 。プロセスは遠隔のノードに生成することができ、遠隔ノード上のプロセスとのプロセス間通信は透過的である。すなわち、遠隔ノード上のプロセスとのプロセス間通信は、同じノード上のプロセスとのプロセス間通信と全く同じように行われる。Erlangでの並行処理では、エラー処理の基本的な方法をサポートしている。あるプロセスが異常をきたすと、プロセスは手際良く終了し、そのプロセスを制御しているプロセス (何らかのアクションをとることができるプロセス) にメッセージを送信する。このエラー処理の方法により、ソースコードの保守性を高め複雑性を低減することができる。