What are the best programming languages to learn now?

What is the roadmap to learn programming languages for a first year computer science and engineering student?

  • Its my beginning and I don't have any fear of getting failed. Its a process. Those who never fail never really learn anything. But I am asking this question because I want to spend my time in learning those languages first that will help me with grasping major concepts and languages later in life. I understand that different languages have different uses. In my case, my B.Tech is just about to start. I want to work with big names like Google, Microsoft, Apple and want to intern in the same companies too. But as a side business, I want to do development of android applications or games. And I may startup something if I feel in coming years that yes its the best way, but for internships I am sure that I have to do them with big names only. I am studying in an Indian University and I am unaware of my college course structure at this point of time because classes will commence from 21st July, 2014. But since its approved by UGC, AICTE, NAAC so I suppose it will be like all other colleges. I wish to know the roadmap that has been tested and made you successful as you today are - so just pure experiences. If the answer includes some or all of the following points, then things will get real easy for me : FOR EXAMPLE if answers are in chronological form of learning languages, then its the best if the names of some books are quoted too like for c you should learn from this, for python do this etc if tou can guide me like this, that in first year you should focus on your cgpa, then in second year get involved in some project, then in third year do an internship, then in this year you should involve tourself in opensource development as it will help you because______,then in this year it should be done and this and that An example answer can be of this type - you start with c/python/c++/java, because it will help you develop these _________, and you learn from this book, now you know the basics so focus on these topics and perfect them, you should learn from this book, meanwhile involve yourself in this (maybe opensource projects, and competitive programming etc), now since you have built your fundamentals, you can proceed with the following languages. I hope I conveyed myself properly, I need true guidance this time, I want to move further with firm steps in life. IT DOESN'T MATTER TO ME IF YOU FOLLOW THE SAME TREND TO ANSWER THE QUESTION AS MENTIONED ABOVE, WHAT I WANTED TO TELL PEOPLE BY THAT EXAMPLE IS IF THESE TYPE OF IDEAS ARE MENTIONED IN MY ANSWER THEN THEY WILL BE OF GREAT HELP. I THINK THAT IT MAY BE ONLY 1 OR 2 THAT WILL BE ABLE TO ANSWER ALL THE QUESTIONS, SO ITS NOT AT ALL A COMPULSION. IF SOME CAN ANSWER ONLY A PART AND CAN GIVE CORRECT GUIDANCE, THEN THERE IS NOTHING BETTER THAN THIS.

  • Answer:

    As others have posted, a roadmap is an entirely incorrect approach. Good programmers are good programmers because they've found and mastered an area of the discipline they particularly love. Mastering any one area of programming is ridiculously hard work, requiring a depth of understanding that most would find tiresome to learn and the people that do it are only good programmers if they then push that knowledge into new places to make things more efficient or solve a problem nobody considered or everyone believed to be insurmountable. Only programmers that love their work have what it takes and predicting what area you're going to love most is especially difficult when you've yet to taste much of what there is out there on offer. With that in mind, use the answers you gather here just to get you started and then every step along the way, when you find something that interests you to discover more about or push a little further, don't be afraid to take a potentially permanent diversion. To get you started, you first must appreciate there are many languages and subareas in programming. Most people end up working with the a language from the C family or Java as these are the most popular across the world. They are most popular because they are extremely powerful, general tools and there exists a library for almost any purpose imaginable. C++ and Java are the two most popular examples of object-oriented languages. These languages are the most versatile and Python is establishing itself as another great offering in this direction, boasting some intuitive features the others missed and have developed too far to efficiently work in. Java is also notable for running on a virtual machine. This means your Java code can run on any machine that has a version of the JVM, which is a useful feature but makes the language slower. Most people won't notice because it is fast enough for most purposes. C is not object-oriented but it is perhaps the fastest 'high level' language out there being very close to the hardware with minimal abstraction. Other higher level languages (more abstractions from hardware) tend to be built on top of C. Going further down than C there is Assembly code. This is the closest you get to hardware before writing directly in binary. Assembly programming is slow and laborious but it provides you with the fastest code. The majority of people are satisfied with the assembly code their compiler generates or hire a programmer with assembly experience just for the small amounts of code that need to run that little bit faster or else are rendered impractical. Assembly not fast enough for you? Well you could learn hardware and/or work with a hardware description language like VHDL. These languages are useful for  generating hardware designed to perform just one task (or a few) really well and produce the plans for the hardware that goes into specialised electronics. If speed is not your greatest concern, you could instead go in the direction of other specialised languages/areas: Web programming is quite popular but not being a particular interest of mine I'm not the best to tell you about its offerings. HTML is not a real language but it may be helpful to know the basics. CSS is gaining popularity but isn't a universal thing just yet and the field is yet to settle; it also exists only really to describe how pages should be laid out. PHP is a far more general web programming language but I believe JavaScript is considered the simplest and best place to begin if you're just after a taste of things. Web programming is split into client and server side areas of interests with the deepest and most technical side being the server which aims to keep things as simple for the client as possible whilst doing the least work it has to so it may serve many users quickly. Logic programming is another specialised area which probably has its biggest focus right now in artificial intelligence though it also looks at topics such as multi-agent systems theorem proving etc. It is a natural direction to go in if you've studied logic and found that to be your greatest interest but it's mostly used only in academic circles. Prolog is a fun and simple language to play around with but you'll quickly discover its limitations for general programming. Nevertheless, its backtracking capability, flexible functions, and ability to rewrite itself at runtime make it quite fun to use and a great choice for any compatible problem type. If artificial intelligence is an interest then you're more likely to want to look at machine learning and one of the more powerful, general languages discussed earlier. You may also need to develop your maths further to get to grips with a lot of its algorithms. MATLAB is an extremely powerful (if a little slow) a language for anything requiring matrices (or vectors or multidimensional tables etc.). This makes it good for Computer Vision, Neural Networks, statistics, big data analysis etc. Graphics also tend to be matrix based but this language is probably far too slow for that. If data analysis or graphics are an interest, consider looking at R; it is a fun, simple, powerful language that practically everybody who uses it loves. Functional programming concerns itself with problems that take in a set of various alphanumeric inputs and produce one output. If your problems of interest match this class, you're in for a treat as these languages are some of the most simple, intuitive, and fun to work with. Haskell is a brilliant example. In terms of hireabilty, functional programmers do well in banking and I suspect there are good opportunities in consultancy. This list is inexhaustive of the options and greatest languages out there to work with but hopefully will help you discover where you want to go searching first. In terms of books, I make no suggestions. You're probably better off asking a separate question for that but really no book is a substitute for just picking up a language and playing around with it. There are many good resources online too to help you learn but the best way I know of learning is doing; simply continuously set yourself tasks that are just a little beyond your current capabilities and get to solving them! Books and other resources exist just for turning to when you get a little stuck; you get past your hurdle and move on. Teach yourself as you go and try to do a little bit of programming every day (new code, not just code maintainance) so you never put it down for too long and lose your progress. Good programmers think and dream in code...

Sean Lucent at Quora Visit the source

Was this solution helpful to you?

Other answers

"CSci 101" is C++, and my friends said the rest of the "core" courses were Java. Electives usually use languages specific to the domain (EG, web development class used a mix of Java/Perl/PHP and Operating Systems used C).   Most notably, the dearly beloved data structures and algorithms class was Java based. Granted I started at the U of Minnesota in Fall 2008 and I was a mechanical engineering grad (not CSci/CE/EE).

Weston Platter

Get yourself a laptop first, if you don't have it, get internet and "USE" it. Short answer is - start coding. Let there be compilation failures. Read about it and the language on internet. Fix it and continue coding.   Additionally, if learning a language is the only objective, then do a research on internet for collection of good books / blogs to start with. Your search for the same can have criteria like knowing about creator of the language, other people who contributed to the language, any blogs they might have that caters to the language you want to learn.   Read books which focus on concepts of the language rather on features. If you understand as to why a particular concept is created in that language, then you can apply the same during programming.    Subscribe to newsgroups of that language.   Follow open source projects in github which have projects in that language. Also, start contributing to the same (normally, to start with, you will have to fix bugs in the project before you will be able to start contributing to the core code functionalities)   Use stackoverflow to search for some common questions asked in that language. Read articles on Dr Dobbs Journal. It has articles from well known, experienced experts in their industry.   Follow the language development as in if the language is making changes to its existing concepts / standard library, etc. - newsgroups can help with that as well or if there is a website for the language.   Finally, learn at least 2 or 3 languages (one or 2 systems programming language like C++, Java, Python, etc., one or 2 functional programming languages like Scala, one or 2 web framework like grails, etc. - ok learning frameworks takes time, so maybe one web framework to begin with, maybe GUI frameworks, QT for cross-platform or WPF / WinForms in .NET, also get an idea for mobile technologies)   Along with above, learn about client / server architecture - REST-full server development (You will need to search internet to know and understand the same) - maybe if you want to learn about this, then get a good book to explain the basics of it or use internet) All of the above is incomplete without application of your learning. So, start solving problems / working on your ideas / projects you can come up with - and see if you can implement your idea using multiple technology / languages - this thinking requires a bit of industry experience, so maybe you can intern somewhere where you can apply your learning and at the same time, learn industry's way of doing things) Normally (not always), some engineering corporations tend to have product(s) based on multiple technology stacks but as an engineer, you may be working on one language or technology most of the time. So, the question may arise as to why learn so many? From my perspective, it will give you a breadth of options to choose from and if you have hold on more than one language, you may be able to think of a solution which may be more efficient / elegant in one language than the other. If you want to learn something then you will need to go beyond the academics. It will teach you theory but not the applications and for applications, you will need to put your own effort. If you take the initiative, then it will be a great learning experience. And, hence the first line of answer! (Looks like quora has become smart. It buffered my answer when my laptop's memory crahsed. Phew! :) )

Nilesh Kumar

Pick a language and stick with it, Learn the fundamentals of programming before doing anything else. then Explore what you want to do with programming and see what others use. The language doesn't really matter. Ultimately. They are just tools

Jesus Balbastro

Good to see you have a lot of interest towards the CS subject which is seldom the case in engineering colleges these days. People are usually there out of parents force or taking the path of least resistance (since Indian soceity makes life easy for engineers or doctors). You do seem to have high ambitions which is a good thing! The way I would suggest you to journey through your 4 years would be - do not rely/depend on teachers/curriculum expecting everything to be taught to you no matter how interested you are in learning. Use the internet for that. Plenty of MOOCs available. - Inter personal skills, aptitude skills and management skills are equally important to technical skills so dont neglect those. - What ever you LEARN in college or by yourself make sure you understand the very basics of it as basics are very important. - As far as internships are concerned, I'd suggest you intern at a startup rather than at a big name company cause the amount of learning that happens at a startup is much higher than at a big company. The learning spectrum is limited at a big company. - As soon as you pick up a new technology, build something with it or make a project out of it. Plenty of resources available online for project ideas. - Contribute to some opensource projects. Learn to use Linux. - Start working on your resume. You can use this site to evaluate your resume http://rezscore.com/ - Don't limit yourself to the curriculum of your college, try to learn as much as possible thereby strengthening your basics. - Become a jack of all trades. Look into different technologies/languages/platforms and build something using them. And lastly the four years of engineering will be the best four years of your life, form a good friend circle..enjoy the engineering life. Read: https://aneeshwrites.quora.com/Engineering-life for more suggestions

Aneesh M Gangadhar

You are asking allot of questions. If you want to be a good programmer you will need to start breaking down the "opportunity" into its constituent parts. Some parts will never come together, they are separate issues "lumped together". First read Sean Lucent's answer. Some of the issues you brought up. 1): "I want to work with..." The problem with that is that you are putting the cart in front of the horse. That is the end goal. Cutting to the end goal, while pragmatic, will not get you there. First rule of programming is doing the research. What does Google use internally? Nominally Python. Study Python. I think that is the wrong answer, because you are asking the wrong question. 2) You asked a better question: "so that my time gets devoted in learning those languages first that will build me for the languages I will learn in future" If this is the question, then what we are talking about is not picking up skills (however important), but rather picking up knowledge. Knowledge that you can build upon later. In which case, I would suggest Pascal, C and Lisp. These languages will force you to think. They will give you the foundation upon which to build. You might never be taught these in school, but you would be best served by reading a couple of books. You can go online and find many free books on those languages. Short answer, C  and Java. If you got some experience writing code in those two, Python will come easy. So will Javascript. So will everything else. Two problems, no, two more "opportunities"... Human Resource Departments are cesspools of conformity and ignorance. They don't even read resumes (CVs), they have an algorithm for that. Its like spending 100 hours on a term paper, only to have a teacher's assistant with barely more experience than you grade it. HR department only look at "skills". If they are looking at hiring a Python programmer, that is what they want. It better be prominently displayed on your resume. And you better know the subject matter. That brings you back to question #1. The second problem is that if you actually want to prosper in your profession, you will have to be able to "think", strategize, and come up with solutions to problems nobody can prepare you for. That is when being able to think like a programmer comes in handy. No school will prepare you for that. You have to do that. That means reading a book a month on a subject matter you will not be graded on. C, Pascal, Lisp, Haskell etc. Looking at the same problem from the perspective of different languages, forces you to think about problems from different perspectives. If you look at a human problem while thinking in Hindi (or whatever you speak at home) you will come up with a different approach than if you think in English. Its the same issue. Same problem, different solutions. And now an opinion. Most "exercises" in CS are mathematical problems. Interesting enough, and you will certainly have to have your math skills up to par. But most problems in industry are not of a purely mathematical nature. They use mathematics as a tool, as should any good CS student. If math is something you are good at, don't stop at learning CS alone. Go and study CS and another subject matter. Study CS and Finance. CS and Accounting.  CS and Mechanical Engineering. CS and whatever strikes your fancy. Lets face it, universities in India are producing a tidal wave of engineers. How do you expect to distinguish your self from all the competition? If you have two degrees you can apply for a specific opportunity. Say, in banking: "I got an Honors degree in Computer Science, and I barely, just barely managed to get a degree in Finance. But if you got a finance problem to model, I already know exactly what you are talking about...". Now think in terms of applying to Tata Motors. A CS degree with a specialization in 3D modeling, or mechanical modeling or... you get the idea. GIVE YOUR SELF EVERY EDGE YOU CAN. I trust this helps.

Marco Fuxa

CGPA, MOOCS, hackathons, projects, internships, scholarships, teaching assistant, competitive programming, open source development, research paper publications, ds and algos, careercup and geeksforgeeks, letter of recommendations, gsoc Is the list a UG cs student must do.

Manu Kothari

Learn pseudocodes Learn algorithms Learn Computer / Mobile / Web Application Architecture Choose at-least one area of your interest from Desktop Applications, Mobile Applications, Web Applications, Mainframes and Embedded. Now pick a language and have fun :) Good Luck !

Rochak Chauhan

If you want to work for the likes of Google and Facebook then your time could not be better spent mastering the English language and how to communicate in it effectively. http://blog.codinghorror.com/the-ugly-american-programmer/

Ed Prentice

Programming languages are just syntax. Learn and understand algorithms. Learn pseudo-code. Develop your own algorithms for performing everyday tasks.

Lamin Swaray

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.