What do you expect to use general purpose programming for during your time in college? I would suggest learning Fortran because it is more useful for math kinds of things - but it won't be a popular recommendation and it still might not address the need to draw charts and graphs.
Next I would recommend Python because there are libraries for just about everything you can imagine. C, although the most important, would be a distant 3rd place. You will have to learn it anyway but the question is what comes first.
I suspect you will want to use a programming language to augment or simulate your course work. I did it with Fortran back in '70 and '71 and used the attached plotter to get charts and graphs. Charts and graphs on a step-by-step plotter are a lot of work.
Today, I would suggest getting very close to MATLAB. At some universities, the program is free to students registered in certain programs and EE would certainly be one of them. If you can't get MATLAB for free and you don't want to pay for the Home license, you can use GNU Octave for all of the math/plot work you will ever want to do. I use both regularly even though I retired nearly 19 years ago. At the university my grandson attended, there is a required MATLAB course for incoming freshman and the program will be used extensively throughout any STEM majors. All of the math is done on MATLAB! Well, except for some elementary math classes where pencil and paper are still required.
I really believe you should focus on MATLAB/Octave, particularly those examples that result in plots.
Get a MATLAB book and get started. Amazon also has books on GNU Octave (and a lot on MATLAB) so pick one and get started.
Here is a little matrix algebra problem that you WILL run into, in some form, in one of your early math classes:
% A football stadium has a capacity of 100,000 attendees
% Ticket prices:
% Student = $25
% Alumni = $40
% Faculty = $60
% Public = $70
% Veterans = $32
% Guests = $ 0
% A full capacity game netted $4,987,000
% Let S = number of students, A = number of alumni, F = number of faculty
% P = number of public, V = number of veterans, G = number of guests
% S A F P V G = value
M = [ 1 1 1 1 1 1 100000; ... % total number of attendees
25 40 60 70 32 0 4897000; ... % total revenue
0 1 -1 0 0 0 11000; ... % 11000 more alumni than faculty
0 1 0 1 -10 0 0; ... % public + alumni = 10 * veterans
-1 1 1 0 0 0 0; ... % alumni + faculty = students
1 0 1 0 -4 -4 0]; % faculty + students = 4 (guests + veterans)
A = M(:,1:6); % extract 6x6 matrix
B = M(:,7); % extract value column vector
P = M(2,1:6); % ticket price by attendee type
R = inv(A)*B; % compute number of attendees by type
T = sum(R); % check total attendees = 100,000 CHECK
U = P*R; % total revenue = 4,897,000 CHECK
V = R'.*P; % revenue by attendee type - transpose R from 6x1 to 1x6
% then do element by element multiplication
%
% fancy output, all previous default output semicoloned
%
label = {'Students' 'Alumni' 'Faculty' 'Public' 'Veterans' 'Guests'};
for i = 1:6
printf('%-8s%7d @ %2d = %7d\n',label{i},...
round(R(i)),...
M(2,i),...
round(V(i)))
end
printf('\nTotals %6d %8d\n',round(T), round(U))
% Results edited back into source code
% Students 25000 @ 25 = 625000
% Alumni 18000 @ 40 = 720000
% Faculty 7000 @ 60 = 420000
% Public 42000 @ 70 = 2940000
% Veterans 6000 @ 32 = 192000
% Guests 2000 @ 0 = 0
% Totals 100000 4897000
We know the total revenue and the total headcount and some relations between various categories. We put it all in a matrix and do some magic matrix inversion, transpose and multiply to get the number of attendees in each category. This is a very elementary intro to matrix algebra but the concept will show up all over the place when you get to Kirchhoff's equations and nodal/mesh analysis.
Note how we specify 11,000 more alumni than faculty. Number of alumni minus number of faculty = 11,000. This is where the magic happens, creating the matrix with all the conditions.
Look at how easy it is to strip a column off the matrix and call it a new vector. MATLAB -> MATrix LABratory
Here's an RC charge and discharge plot:
V0 = 1; % assume a supply voltage
R = 10000; %10k Ohms
C = 0.1*10^-6; % 0.1 ufd
Tau = R*C;
t = linspace(0,8*Tau);
Vchg = V0 * (1 - exp((-t/Tau)));
Vdis = V0 * (exp((-t/Tau)));
plot(t, Vchg)
grid minor
grid on
hold on
plot(t,Vdis)
ylabel("Voltage")
xlabel("Time - seconds")
%there is a known bug in 'legend', the [h,~] is a kludge to work around it
[h,~]=legend("Charge Voltage","Discharge Voltage");
figure(gcf) % or shg command - pull plot to top
for Tau = 0:6
pct_charge = V0 * (1 - exp((-Tau))); %percent charge
t1 = -log((1-pct_charge)); % my version
t2 = log(1/(1-pct_charge));% book version
fprintf("%% Tau = %.0f Percent Charge = %5.2f,\t t1 = %7.3f, t2 = %7.3f\n", ...
Tau, 100*pct_charge,t1,t2)
end
% output
% Tau = 0 Percent Charge = 0.00, t1 = -0.000, t2 = 0.000
% Tau = 1 Percent Charge = 63.21, t1 = 1.000, t2 = 1.000
% Tau = 2 Percent Charge = 86.47, t1 = 2.000, t2 = 2.000
% Tau = 3 Percent Charge = 95.02, t1 = 3.000, t2 = 3.000
% Tau = 4 Percent Charge = 98.17, t1 = 4.000, t2 = 4.000
% Tau = 5 Percent Charge = 99.33, t1 = 5.000, t2 = 5.000
% Tau = 6 Percent Charge = 99.75, t1 = 6.000, t2 = 6.000
Both of these examples run in the free version of Octave as well as under MATLAB
Hint: Octave will accept # as starting a comment, MATLAB won't. Both will accept % so that is what I use. I never know which program I will be using because MATLAB is only licensed on one machine but Octave runs everywhere. MATLAB has many add-on packages that Octave simply doesn't have - Simulink being very important later on. Others like the EE package are also important and if you can swing MATLAB and the extra cost packages, do it. Otherwise, Octave will have to do.
Don't forget Desmos.com for graphing and Symbolab.com for solving.