What is the roadmap to learn programming languages for a first year computer science and...

Quora Feeds

Active Member
Sean Lucent

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...

See Questions On Quora

Continue reading...
 
Similar threads

Similar threads

Top