Here is a three “real” line code to compute the SVD using the squaring technique. Note the trick to avoid having two essentially equivalent versions of the same code.

Clear[SVDecomp,A]
SVDecomp[A_]:= Module[
{n,m,Vals,Vecs},
(* Detects and Deals with Fat Matrices *)
{n,m}=Dimensions[A];
If[m>n,Return[Reverse[SVDecomp[Transpose[A]]]]];
(* Back to main code *)
{Vals,Vecs}=Eigensystem[Transpose[A].A];
Vals=(Sqrt[Vals]);
{A.Transpose[Vecs/Vals],DiagonalMatrix[Vals],Transpose[Vecs]}
]

The uniqueness part of the SVD theorem and the followin output says that this is working

{n,m}={120,23};
A=RandomReal[{-1,1},{n,m}];
{U,S,V}=SVDecomp[A];
Id=IdentityMatrix[Min[n,m]];
MatrixPlot[S,
PlotLabel->Map[Norm,{Id-Transpose[U].U,Id-Transpose[V].V,A-U.S.Transpose[V]}]]

Someone is going to say that it is faster for TS matrices rather than SF matrices baecause of the transpose
and the data copying.  True enough.

{n,m}={240,230};
A=RandomReal[{-1,1},{n,m}];
AT=Transpose[A];
SampleSize=400;
DataA=Table[
Timing[{U,S,V}=SVDecomp[A];][[1]],
{SampleSize}];
DataAT=Table[
Timing[{U,S,V}=SVDecomp[AT];][[1]],
{SampleSize}];
Histogram[{DataA,DataAT},
AxesLabel->{"Sec","n"},
ChartStyle->{Red,Blue}]