Automatic line-breaks in tables?

Anyway you shoud specify desired width of column. Noone other can guess which one would be acceptable:)

You may specify width of column using p{} instead of column justification. It has the only argument, the width of the column.

\documentclass{article}

\begin{document}
\begin{tabular}{lp{5cm}}
    2009--present           & very long text 1, very long text 2, very long text 3, very long text 4, very long text 5, very long text 6, very long text 7, very long text 8, very long text 9, very long text 10\\
    2009  & Masters\\
    2006  & Bachelors\\
\end{tabular}
\end{document}

Or you may use \parbox{}{} in a cell with long text.

\documentclass{article}

\begin{document}
\begin{tabular}{ll}
    2009--present           & \parbox{5cm}{very long text 1, very long text 2, very long text 3, very long text 4, very long text 5, very long text 6, very long text 7, very long text 8, very long text 9, very long text 10}\\
    2009  & Masters\\
    2006  & Bachelors\\
\end{tabular}
\end{document}

As requested, an answer with tabularx. I also added a solution with listliketab. I still prefer a description list because of the vertical alignment.

Code

\documentclass{article}
\usepackage{tabularx}
\usepackage{listliketab}
\usepackage{lipsum} % only for this example
\begin{document}
\lipsum[2]
\medskip

\noindent
\begin{tabularx}{\linewidth}{@{}>{\bfseries}l@{\hspace{.5em}}X@{}}
    2009--present & very long text 1, very long text 2, very long text 3, very long text 4, very long text 5, very long text 6, very long text 7, very long text 8, very long text 9, very long text 10 \\
    2009          & Masters                                                                                                                                                                              \\
    2006          & Bachelors
\end{tabularx}

\medskip
\lipsum[2]
\begin{description}
    \item[2009--present] very long text 1, very long text 2, very long text 3, very long text 4, very long text 5, very long text 6, very long text 7, very long text 8, very long text 9, very long text 10
    \item[2009]          Masters
    \item[2006]          Bachelors
\end{description}

\lipsum[2]
\storestyleof{description}
\begin{listliketab}
  \begin{tabularx}{\linewidth}{@{}>{\bfseries}l @{\hspace{.5em}} XR}
    2009--present & very long text 1, very long text 2, very long text 3, very long text 4, very long text 5, very long text 6, very long text 7, very long text 8, very long text 9, very long text 10 \\
    2009          & Masters                                                                                                                                                                              \\
    2006          & Bachelors
  \end{tabularx}
\end{listliketab}

\lipsum[2]
\end{document}

Output

enter image description here


You could use a table, but it's normally better to use a list such as

\begin{description}
\item[2009--present]            very long text 1, very long text 2, very long text 3 , very long text 4, very long text 5, very long text 6, very long text 7, very long text 8, very long text 9, very long text 10
\item[2009]Masters
\item[2006] Bachelors
\end{description}