C is probably what you will want to end up programming with, but to learn it cold?  I do not think it can be done.
Here is what I mean, this is a simple lil C++ section of code:
public class SqlPropertyDescriptor : PropertyDescriptor
{
  public static SqlPropertyDescriptor GetProperty(string name, Type sqlType)
  {
    Type baseType = sqlType.GetProperty("Value").PropertyType;
    ArrayList attribs = new ArrayList(TypeDescriptor.GetAttributes(baseType));
    Attribute[] attrs = (Attribute[])attribs.ToArray(typeof(Attribute));
    return new SqlPropertyDescriptor(name,attrs,sqlType,baseType);
  }
  private Type SqlType;
  private Type BaseType;
  protected SqlPropertyDescriptor( string name,Attribute[] attrs,
    Type sqlType, Type baseType ) : base(name,attrs)
  {
    SqlType = sqlType;
    BaseType = baseType;
  }
  ...
  public override void SetValue(object component,object value)
  {
    PropertyInfo pi = component.GetType().GetProperty(this.Name);
    Object o;
    if ( value == DBNull.Value )
    {
      o = component.GetType().GetField("Null", BindingFlags.Static
        | BindingFlags.Public | BindingFlags.GetField).GetValue(component);
    }
    else
    {
      o = pi.PropertyType.GetConstructo r(new Type[]{BaseType}).Invoke(
        new Object[]{value});
    }
    pi.SetValue(component,o, null);
  }
  public override object GetValue(object component)
  {
    object Property = component.GetType().GetProperty(this.Name).GetValue(
      component,null);
    if ( (bool)Property.GetType().GetProperty("IsNull").GetValue(Property,
        null) )
      return DBNull.Value;
    return Property.GetType().GetProperty("Value").GetValue(Property,null);
  }
}
Here is a simple lil piece of basic:
10 CLEAR 500
20 REM SET I/O AREA TO ENHANCED INSTRUCTION WORK AREA
30 POKE &HFFEF,&H00
40 REM DEFINE STRING & FILENAME FOR "OPEN" FUNCTION
50 A$="TEST.BAS"+CHR$(0): REM STRING MUST BE ZERO TERMINATED
60 REM DEFINE & SAVE ATTRIBUTES TO USE IN OPEN
70 REM CREATE FILE WITH READ & WRITE PERMISSION
80 POKE &HFFE4,&H01: POKE &HFFE5,&H80
90 REM SAVE STRING POINTER, MSB FIRST, LSB SECOND
100 POKE &HFFE2,&H02: POKE &HFFE3,&H41
110 A=VARPTR(A$)+2: POKE &HFFE0,PEEK(A): POKE &HFFE1,PEEK(A+1)
120 REM EXECUTE "OPEN" FUNCTION, IF SUCCESSFUL &HFFE4-&HFFE5 WILL CONTAIN FILE'S CHANNEL NUMBER
130 POKE &HFFEE,&H10: IF PEEK(&HFFEE)<>0 THEN GOTO 250
140 REM DEFINE BUFFER AND LOAD WITH DATA
150 A$="THIS FILE WAS WRITTEN FROM THE COCO EMULATOR"+CHR$(10)+CHR$(13)
160 REM SAVE BUFFER LENGTH
170 POKE &HFFE2,&H00: POKE &HFFE3,LEN(A$)
180 REM SAVE STRING POINTER, MSB FIRST, LSB SECOND
190 A=VARPTR(A$)+2: POKE &HFFE0,PEEK(A): POKE &HFFE1,PEEK(A+1)
200 REM EXECUTE "WRITE" FUNCTION
210 POKE &HFFEE,&H13: IF PEEK(&HFFEE)<>0 THEN GOTO 250
220 REM EXECUTE "CLOSE" FUNCTION
230 POKE &HFFEE,&H11: IF PEEK(&HFFEE)<>0 THEN GOTO 250
240 END
250 REM ERROR
260 PRINT "AN ERROR OCCURED"
270 END
Which do you think a total newbie to programming will be able to figure out, learn and apply?