One day I was having an argument about programming languages.Now as a learner and as somebody who has ventured trough 3 different IT universities succesfully this is what I have to say.
Anyhow,here is my qoute from that argument:
You should first learn the language for which you have the most talent.Whatever language feels the most natural to you.If it is for instance some obscure lisp dialect then by all means go learn lisp.If it is python,go learn it.Is it lolcode,qml,brainfuck,assembly or some language which is so hipster that nobody has ever heard about it?Go ahead.
The tragedy is that the industry and programming courses are not made to be language agnostic,so you are force fed to learn the languages they pick for you.
The plusses of my approach would be many,but just to point a few:
a)programmers that are happier about their life
c)better API support for a wider range of languages in the long run.
The modern model where the industry forces the popularity of programming languages has some drawbacks.Another problem is in the fact on how programming courses are organised.
I think that most of us will agree that the choice of your first programming language is very important and that at least sometimes people can get discouraged from programming if their first programming language is not suited for them.
Ideally both the industry and the courses should be language agnostic.Now you might think it is impossible but no it is not...The basic principles of programming are identical in 99% of programming languages.The only differences are in the implementation.
It just requires some manpower from the education facility.In fact in my last course of programming on my undergraduate college I was attending a language agnostic programming course.And honestly I feel that course was the one where I learnt the most.I even caught up some stuff I failed to learn at earlier courses. (Like inheritance and anything related to OOP that is above simply instancing an object with getters,setters and constructors).
In the first week of the course students were required to pick one of 3 programming languages.C++,C# or Java.I picked Java which was that year the least popular choice.And I did not regret it.But before I continue I have to give thanks to my teachers prof. Goran Salamunićcar and his assistant Aleksandar Radovan,and the two other assistants who I did not have who implemented the course in such a beautiful and almost language agnostic way.
The course was split into parts:Theory,laboratory work and a seminar.The theory was mostly done by the professor,the laboratories were handled by the assistants.
The theoretical part always was 2 weeks in advance compared to the laboratories,so that the students could use the theory as a source for their homework.Each week the theoretical presentation lasted for averagely 1 hour and 45 minutes.1 hour of that time was spent on the theoretical background of programming.15 minutes were spent on each language to explain how it was implemented.There were 2 mid term exams that had 2 theoretical questions,2 questions where you had to write code snippets and 2 mixed questions where you had to do both.If you passed the midterms you freed yourself from the theoretical part of the exam.
The laboratories included homework and there was a point system.The assistants had a lot of freedom on how to execute the laboratories.However this is how it was done with Java:
Homework was given one week in advance.But doing the homework was rewarding because the actual laboratories were rehashes of the homework with just minor changes to the code.And as such students who had finished the homework themselves were rewarded with more points.There was also an entrance quiz which consisted mostly of things from the homework and an exit quiz,each of the quizzes was worth 3 points.The actual laboratory was worth 3 points + 1 extra point for students who had done anextra task which was not a part of the homework and was decided by the assistant on the spot.At the end of the lab the assistant would give the students the code from the lab if they requested it by email.
The seminar brought the most points for the course.Basically the students would have to decide on a seminar topic and make a fully functional app.Each app has to cover at least 4 topics from the laboratories.Also the student has to make a documentation of the app and defend the seminar with his assistant.Once that is done,if the student has enough points in all areas of the course all he has to do is to take an oral exam with the professor and then bingo he has passed the course.
But you could say that the course I mentioned earlier is still not completely agnostic because you still only have a choice of 3 languages.Well this is how I would solve it:
And yes I agree this path would be very tough for the student.
Basically students would be presented with this option.If their wished language is too obscure to be included,the student should do 4-5 seminars/apps.Each one of those should be tied to several areas of theory and laboratory practice that the other students take part in.The student would still have the support of the professor who would be qualified to teach him all of the theory.The student would still have all the resources of his educational institution.And perhaps the professor could link the students to other assistants and professors who are not part of the course but happen to know the students desired programming language.Also the student would still have at least a very loose educational direction.
The evaluation of the seminar would then replace the laboratories.Since the students were freed from laboratories it is assumed they had enough time for the seminars.Once again I repeat,choosing this path might not be easy for a student,but I firmly believe this would improve the output of decent programmers from educational institutions.Also this would allow the institutions to measure the popularity of programming languages so they could tweak the course even further.