Reginald Braithwaite writes about the challenge of learning a new programming language. A very good article. Learning a programming language is more than reading a book. It is about understanding the difference, and its implications. Every programming language has an underlying philosophy, which I think is more important than the syntax, and every programmer should yearn to understand that.
The article touches on something else which I strongly feel about - you cannot learn programming languages at universities. Not only that the industry moves faster than the universities, but universities hardly give you real problems to work with. In my opinion, one of the best ways of learning a new programming language is to deal with a real problem, not the tests and examples.
However, I think there is another reason why a lot of people refrain from learning a new programming language. It is natural to feel less efficient and even lost in the beginning of learning a new language. You are in a new and unknown environment, and a lot of time will go in looking for information. Many experienced programmers I know are afraid of this newbie feeling. In other words they are far too comfortable in their world to try and experience a new one. However, it cannot be avoided, new things will soon become significant enough to impact your own world. The best way, in my opinion, is to be ready for the pits and be resourceful enough to pull yourself out of it.


October 19th, 2007 at 10:59 am
Yes i agree…but when you are trying to solve a real problem, you are constrained by various limitations like time,professionalism,underlying contracts with customers and the costs associated with these various limitations…
So how do you think that one can strike a balance between learning and yet make a professional awesome delivery?
moreover clients are not just looking for solutions to their requirements but they are also looking for innovation and value adds…so how feasible would these be when you have learners in your team?
October 19th, 2007 at 12:16 pm
indyank, a couple of points. Programming is about acknowledging and understanding the constraints. In fact you will appreciate a language only if they are not considered. For that you need not be in a project, but you can do a self-project which as a real world problem.
You are right when you ask how can the balance be struck. That I think is dependent on the individual. But every time you program you are learning. I do not think one can do a professional deliver without learning on the project.
Regarding innovation and value additions, they are not dependent so much on the language. They are dependent on the architecture, the design, the programming paradigm and most importantly thinking of the programmer. The programming language is a tool to implement these.
October 19th, 2007 at 7:40 pm
I think you should make a distinction between learning programming languages at universities as part of a course that teaches programming (e.g. computer science), and learning programming at universities because you need to write software as a career researcher. I would argue that university research can often present tangible and often tricky software development problems, and overcoming these can lead to good quality, innovative code as well as being a good learning process for the researcher in question. Of course this isn’t always the case, but it is sometimes…
October 19th, 2007 at 7:50 pm
Well put Jamie. I think any opportunity to write the software for a need works as a good learning opportunity.
October 19th, 2007 at 7:53 pm
I wish I had this book 10 years ago when I was trying to learning programming in a university. Believe it or not, they tried to teach me programming in a regular classroom and the instructor was the only one with a computer and they tried to teach via written code on the chalkboard! This was like teaching me to drive while making me sit in the back seat which is definitely NOT a real world situation. This caused me to fear programming to the point where I thought I couldn’t learn on my own. More importantly they treated programming like it was just learning code, but it is much more than that…
October 20th, 2007 at 1:32 pm
Yes I agree on the first, if it is a project without the constraints I mentioned, i.e it is a self project,for solving a real world problem…
but I also think that good universities would always want their students to do a project on a real world problem…atleast that is the case at IITs in india…and i am sure it is so, in most good universities in US…
On the second point,yes you are learning all the time in projects,but those are learnings that mould you into an expert and not the the first time learners of a programming language…
On the third point,I have a question…how can we use the programming language as a tool to implement the innovations and value adds unless you are a reasonable expert in the program…
So I still believe that universities are the place where you need to strengthen your basics…improve upon your logical and analytical thinking skills…i do agree that IT evolves much faster than universities and newer programming languages emerge at a greater speed than in universities…but the fundamental languages which strengthen your basic programming skills like C,C++,Java,OSs and databases are always going to help you in learning any new language..after all these are derived from these basic languages..you don’t have to learn every programming language in universities but learning these languages will make life much easier as these are the best languages to strengthen your concepts on OOPS,RDMS/OODBMS,etc.uiversities do have a role…
October 20th, 2007 at 2:48 pm
indyank, I think the question you are putting up is how can one participate in a project unless he/she is an expert in that language. I cannot say for others, but I have learnt new languages while working on projects, and I think that has worked the best for me. Of course I knew the syntax of C++ before I worked on the project, but I really learned the language during the project. In fact I think it will be difficult to master a programming language without working on a project, which means that you might not be an expert in a language when you get to work on a project with it.
That is the reason I keep saying that if you do not get a chance to do so, do not learn a new programming language without trying to solve a real problem with it.
About university courses, I do not think they are completely useless. But they sure are not up to the mark. They focus more on the theory, which is not wrong, but they do not focus as much on the practicals. There are simply so many aspects in programming that only an experience can teach you.