One of the most common questions people new to programming face is “Where does one start?”
The number of programming languages and platforms out there has made it slightly overwhelming for newcomers to get started. I’ll try to answer this question with my (relatively small) experience of over 6 years dabbling in various technologies. My answer would be slightly biased to a particular platform/language (as you will notice soon). Latest trends have seen Atwood’s Law become a reality.
It says that any application that can be written in JavaScript, will eventually be written in JavaScript.
Everything got it’s Javascript equivalent including JS based servers such as Node.JS and MVC frameworks such as Sail.JS. The Javascript based MEAN (MongoDB, Express.JS, Angular.JS, Node.JS) stack is gaining popularity over WAMP/LAMP (Windows/Linux, Apache, MySQL, PHP/Python) stacks.
Over the last few years, the notion of app stores have caught up rapidly. Apart from the largest app stores from Apple (for iPhone) and Google (Android), almost all players such as Microsoft, Blackberry and Amazon have come up with their own app stores. We’ve also seen the inception of various new mobile platforms such as Ubuntu for Mobile, Firefox OS and Tizen (by the Linux community). They’ll have their own stores of course.
Now what does all these mean to a developer trying to commercialize a software product? You can’t simply develop for one major platform (read Windows desktops) and expect the money to flow in. That era is over. It would be a serious waste of development time to port your application to the native code for each of these platforms as well.
Web is THE only solution here. All platforms presently support Web apps natively i.e. we can run our web-based application on these OSes like native applications without the aid of any browser. The latest web standards like HTML5 specifically address such usage by facilitating direct access to various mobile hardware such as camera and GPS to web applications. In fact Firefox OS is specifically designed to support web apps.
The trends mentioned above must be apparent to anyone closely following the Tech industry. But I’ve seen many of my friends interested in learning programming sitting down with C/C++ only to lose interest soon afterwards and complaining how boring it is. A basic knowledge of these languages (from the 1980s) might be helpful in understanding the basic concepts of programming. But these are NOT a must have for a modern-day programmer. Nobody even uses these in the industry anymore (mostly). Similarly don’t think web development isn’t part of mainstream programming. Surprisingly a vast majority of people including computer science students have that incorrect notion. Most companies now predominantly work with web technologies. It’s our syllabus that has got it wrong.
If you are seriously interested in programming, here is what I suggest:
- Learn basics of programming (C/C++, ideally don’t spend more that a few weeks)
- Learn HTML and CSS => build static websites
- Learn Javascript => build interactive websites
- Learn a server-side language => build web applications (PHP, Python, JSP, ASP, Ruby Javascript etc)
- Learn a server-side framework => build better and bigger web apps
- Optionally learn mobile app development for a mobile platform (Java for Android, Objective C for iOS etc)
- Optionally learn one industry standard core programming language like a Java or C# in-depth. This is esp. relevant for computer science students looking for jobs/internships.
- Optionally learn to use a few CMSs ( Drupal, WordPress, Joomla etc.)
That’s it. You are good to go.
In the server-side, there are vast number of languages to choose from. If you choose to go with Javascript for server side as well, you get to avoid learning another language though you’ll be skipping over a major era in the evolution of web technologies.
There are various frameworks for most popular languages out there like Zend, CodeIgniter and Laravel for PHP, Django for a Python, Ruby on Rails (ROR) for Ruby, Sail.JS for Javascript etc. Such frameworks take care of basic things needed by all web apps such as security so that developers can focus on their application logic.
You should choose a framework that suits the requirements of the product that you’re building.
My answer is mostly addressing students interested in learning programming for working on some idea that they have or for the fun of it. If you are a computer science student who’s looking to take your programming knowledge to the next level, I suggest you take a different path.
Hone your knowledge of various data structures (stacks, queries, linked lists) and algorithms (sorting, searching, recursion etc). I would recommend ‘Introduction to Algorithms‘ by Corman as a must-read and primary reference. In case of Kerala university, algorithm analysis and design is in S7. By the time you would have missed out on lot of good placement/internship/coding-competition opportunities.
So start as early as you can (atleast by early second year). Try to participate in monthly cookoffs at Codechef, do their practice questions, attempt problems in various websites like TopCoder, target and prepare for international coding competitions like ACM ICPC etc. Trying to attempt these one or two weeks before college placements isn’t going to get you the best results. Also sign up for some computer science oriented community like the IEEE Computer Society or ACM or Computer Society of India (CSI) to stay abreast of the latest developments in various domains and to stay connected to the industry.
I hope this will help students get a better idea on how to get started with programming.
The views expressed here are my personal opinion. Please feel free to share your suggestions in the comments. 🙂