Where do I start (programming)?

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

My learnings from B-Tech Life

I recently had the opportunity to be awarded Mar Baselios Youth Excellence Award 2014. The award was given by the Honorable Minister of Home & Vigilance, Govt. of Kerala, Shri. Ramesh Chennithala.

Image

 

I had delivered a short speech on receiving the award. An extended version of the same was also given for publishing in the MBCET college magazine. My talk was mostly about the key lessons that I’ve learned in my relatively short life so far. The ideas I presented are nothing new but still I am surprised how few students actually live by these. Below I would like to share key excerpts from the speech. 


 

In this world, each one of us faces widely varied situations and circumstances. Not all of them might be directly beneficial for us. But all of these experiences help shape our perspectives. For a keen enough observer, there is a lot to be learned from his/her surroundings. I would like to share a few things I have picked up in my journey so far and have proven priceless to me.

The first and probably most important thing I have learned is about persistence. Former American President Calvin Coolidge has said

“Nothing in this world can take the place of persistence. Talent will not: nothing is more common than unsuccessful men with talent. Genius will not; unrewarded genius is almost a proverb. Education will not: the world is full of educated derelicts. Persistence and determination alone are omnipotent”.

If you work hard enough, things will simply fall in place.

Next is opportunity. In this world, there is always enough and more opportunity for those in the look out for it. Most of us fail to notice this. At times when opportunity presents itself in our face, we feel overwhelmed and shy away from it, thinking we are not good enough. Please don’t do that. Have faith in yourself and leverage your opportunities.

In developing countries like India, many burning problems like hunger, poverty and transportation are yet to be solved.  At the same time, we have access to the same level of knowledge that researchers in world class universities have, thanks to the Internet. These are all opportunities for engineers like us to step up and contribute.Vinod khosla of Sun Microsystems has said

“Freedom to fail is a key ingredient in success. Try and fail, but do not fail to try. Every disadvantage in India is an opportunity to do something big“.

We engineers have a moral obligation to contribute to our nation’s growth.

Another is optimism. Like Steve Jobs said

“the people who are crazy enough to think they can change the world are the ones who do”.

We have the freedom to take risks and make mistakes. We might fail. But we have nothing to lose. Be optimistic. The battle is not over until you give up. So up your stakes, take risks, make mistakes, chase your dreams and live your life to the fullest so that you’ll have no regrets looking back.


 

(extended version given for college magazine)

Now lets not get too superficial or distant. We are part of a system which involves classes, learning, exams, university etc. But one thing we should realize is that all systems are or were made by ordinary people like us. This lends them two attributes that we can take advantage of –

  • they are designed with the average audience in mind.
  • they are not fool-proof.

Most of us must have faced a dichotomy in our school days – either be the studious ‘teacher’s pet’ student or the so-called ‘cool’ back bench mischief maker. But in college that need not be the case – here you can have the cake and eat it too. The reality is that everyone studies mainly during the few days before the university exams. This leaves us enough and more time to focus and hone our skills and pursue other varied interests. It’s upto us to take advantage of this time and invest it in the right things. Make good friends, spend quality time with them and have fun.

At the same time find something that you are really passionate about – be it sports, art, coding or whatever and invest lot of quality time in excelling in it. In the book Outliers, author Malcolm Gladwell says that it takes roughly ten thousand hours of practice to achieve mastery in a field. Start now! Involve in various clubs in college such as IEEE, NSS, Entrepreneurship Development Cell, Drama club etc. Travel a lot. Meet and interact will a lot of different people. All these will help you grow as a person.

I would like to end my words with another famous quote by Steve Jobs –

“Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma – which is living with the results of other people’s thinking. Don’t let the noise of other’s opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.”

 

LabX – Startup Village Internship takeaways

This post had been delayed for quite some time due to my exams. These are the key takeaways from my LabX – Startup Village internship – listed briefly.

  • Learned how market research and competitive analysis is performed

○ Identified tools used for the analysis.
○ Understood what to look for in the vast amount of available information.
○ Learnt to process and present the raw data as useful information.
○ Avoiding plagiarism, properly referencing and citing details etc.

  • Acquired basic working knowledge on a new domain life sciences

○ Got a high level overview of the drug development process, steps involved etc.
○ Got to appreciate the size of the drug development market in general and the cancer cure vertical in particular.
○ Developed more confidence in getting out of comfort zone and tackling unknown domains.

  • Was able to take part in a software development cycle OSUTEAM

○ Understood how custom softwares are build from a customer standpoint and a developer standpoint.
○ Understood how technically sound softwares may fail to meet end user expectations and how that can be resolved.
○ Was able to understand more about ontologies, semantic web (ResearchIQ, met Omkar Lele)

  •  Learned a lot of new perspectives and strategies on entrepreneurship 10Xelerator

○ Interacted with a lot of entrepreneurs who were passionate about their causes.
○ Got lot of guidance from entrepreneurs (mentors) who had been there, done that.
○ Learned a lot from hands on workshops on things like team building, storytelling, brand building, pitching etc.
○ Worked closely with a startup called Stockleap (10x participant), helped design the development strategy.
○ Had first hand experience of the entrepreneurship culture of the west.

  •  Takeaways outside the program

○ Met many interesting people from a diverse background

■ Stayed with and learned a lot from PhD. and Masters students in computer science (and other branches as well).
■ Interacted and took guidance from professors in computer science (Prof. Rajeev Ramnath, Prof. Arnab Nandi) as well as business (Prof. H. Unnava Rao).
■ Met a lot of MBA students from Fisher COB and learned about opportunities for future business studies.
■ Met people who have led social entrepreneurship initiatives (like Farooq Busari from ShakePoverty), people who guide social innovators (like Patrick Westerlund from Tony Wells Foundation) and took guidance for implementing DialBlood.
■ Met IP coordinator Jennifer Warner, Technology Commercialisation & Knowledge Transfer Office and learned about market potential for a patent related software product.

○ Attended a lot of technical and startup meetups

■ Including Startup saturdays, Wakeup Startup, weekly Python Dojos, MongoDB meetup, Ohio Linux Fest, AngularJS meetup, Columbus CodeJam etc.

○ Saw a lot of beautiful places within Columbus and outside (Boston, Las Vegas) as well.
○ Worked on a project called Intopia Simulation for use by an MBA program.
○ Read startup books like The Lean Startup, The Art of the Start etc.

Pdf – LabX Internship Takeaways

10X Accelerator

I’d been lucky enough to take part in the 10X accelerator during my internship with Fisher college.

10x accelerator program was started by the TEC Institute few years back and presently accelerating it’s fourth batch. Its presently being operated by Founders Factory. Ten startups are given 10 weeks of high profile mentorship, office space and 20k$ each. 10x focuses on early stage startups & even accept ones in their ideation phase.
First of all, an accelerator is any platform which helps startups get their product to market faster and thus make money faster. Various startups require various types of assistance to get to this objective.  So from a startup perspective, it’s not just important to get into any accelerator but getting into the one that’s right for them could make all the difference.
I got the opportunity to attend one of their initial key operational meetings where they selected the top 10 startups to accelerate from the top 25. This was very valuable for me as I got to know the key criteria for getting into an accelerator. Some of these include:

  • The entrepreneurs themselves. A successful startup requires a wholesome team including a hustler, a pro developer, a marketing guy etc. There are also cases of founders managing multiple of these roles by themselves.
  • The match between mentors available and the startup requirements is really important.
  • Whether the startup can be considerably accelerated during the acceleration period. (Some startups with really great ideas didn’t get through because 10 weeks were too short for meaningful acceleration).

Each week of 10x has a theme to it. All activities, talks, meetings etc are based on a that theme. Some of the themes include:

  • Lean Product Week
  • Story Telling Week
  • Branding UX Week
  • Technical Development Week
  • Sales Strategy Week
  • Leadership and Team Building Week
  • Capital Access Planning Week

I got the opportunity to attend talks and interact with very interesting people during my time there. Various successful entrepreneurs who had been through the pains of setting up their own business shared their insights – a wide range of perspectives were shared on a daily basis.

One of the best sessions I attended was that Mike Blackwell, an experienced entrepreneur and lean advocate. His opinions were rooted in reality. The first thing he said was that he doesn’t care about our idea. Nor are his opinions/feedback about our ideas going to be of any use for us. The point here being that only the actual target audience will be able to validate a new startup idea. No use running it through a thousand others for feedback. Another key insight was regarding the lean methodology which has gained immense popularity lately. Mike said that blindly adopting that too is a bad idea. The main idea of the lean methodology is to iterate through a Build-Measure-Learn(BML) cycle where you build often, release often, make or break, learn from the same and improve. Eric Ries, who wrote ‘The Lean Startup‘ book had setup his startup in the valley where money was abundant. His startup had a burn rate of more that 50k per month. Such a startup can afford to throw hours and hours of developer time into new features which may or may not appeal to customers. According to Mike, we can filter out may of the conceived features even before passing through the BML cycle. This advice is especially valuable to companies which are not as lucky as the ones in the valley. In fact I personally feel that such an approach is extremely lacking most Indian startups. First thing people do on getting an idea is to spend the next few months developing their dream product which in the end most often turn out to be something nobody wants. All this burns away the initial investment and delays the time to market. Validation of the idea is the key!

One of the most valuable takeaway from 10x was the opportunity to closely interact with the founders of the 10 startups in this year’s program. There are teams from various parts of the world including Australia and Israel, from different backgrounds and age groups. Each of them still continues to motivate me – extremely passionate about their idea, highly self motivated & focused. Day in and day out, they are working very hard to bring their dreams to reality. The fact that they are also normal people like us but with the exception of extra ordinary will power struck me. My only regret is that I couldn’t take part in the entire program. It’s nearing it’s completion with the Demo day fast approaching on Nov 15th. A large number of VCs and angel investors will be attending that day. Paul Singh, of 500 Startups fame is the Keynote speaker. I’m pretty excited about the event and wish the very best for all 10 startups.

The Ohio Linux Fest

Today I attended the Ohio Linux fest 2013. It was at the Greater Columbus convention center. One key reason which drove me there was that today’s keynote speaker was Mark Spencer, the founder of Asterisk the open source PBX. Asterisk happens to be the PBX that we’re using at the back end of DialBlood. He was a much younger guy that i expected. His talk was very insightful. The way he was able to setup a sustainable commercial business (Digium – his telephony company) at the same time nurturing & growing a powerful open source project was interesting. The challenges he faced/facing were also somewhat unique:

  • People using his own product to compete with him – the disappointing side effect of open sourcing.
  • Large scale Chinese imitations (of telephony hardware)

After his presentation I went and talked to him personally, told him about what we are attempting to do with DialBlood. He was interested & asked me to mail him our details. He also suggested that Asterisk12 has features like RESTFUL web interaction that we might find handy. I also got an autograph from him.  🙂

image

I also attended sessions related to Ubuntu community as well as Raspberry Pi, all really interesting. There was also an exhibition where many Linux based products were demoed. One of the stalls which was put up by a company called Systems 76 impressed me. The had high end Linux machines running games like the latest version of DOTA in maximum graphical configuration. Linux gaming has apparently come a long way since I last checked!

 

Got some goodies as well. 🙂

P.S: This is the first post I’m making from the Android WordPress app on my new phone. Please ignore typos..

The Boston Trip

Myself & Siddharth went to Boston last weekend (Aug 17th-19th). For a trip that started off in a mess, it ended really well. 🙂
Alfred, the other LabX intern joined us from Chicago. The stay and travel was all coordinated by Sampreeti, the director of LabX and a PhD. student at MIT.

Initial mess – We had some hiccups in our way to Boston. The flight was at 8.30 am. I usually wake up past 9am. I figured it would be a wise idea to stay awake the whole night so that I’ll be up on time & I can make up for the lost sleep on the flight – neat plan, bad execution. I thought I’d do the packing towards the later end of night so that I’ll have something to engage in. I was awake till 4.30 am and then accidentally fell asleep. My phone also got accidentally switched off. I missed a lot of calls. Siddharth came over & woke me up by 7.10am. I quickly packed up & we got in the car. Time 7.45am. Thats when I ask Sid if I need passport for domestic airlines. Apparently yes! I didn’t have it. I ran back home, emptied both of my suitcases and started rampaging through all my documents. At 8am, all hopes were lost. We were discussing where the nearest Indian embassy was – for me to apply for a new passport. Thats when my passport pops up at some obscure hidden part of a suitcase. Joy! We made a run for the airport. Reached – 8.15am. 15 mins for the flight to take off. Actual reporting time being 45 mins before the flight, we didn’t have any hope. But surprisingly, we sped past the baggage check in & security check & boarded the flight with 10 mins to take off. Yay!

Wait. It wasn’t over. We put on our seat belts & got ready for take off. Then came an announcement – the pilot just noticed that the flight’s (Southwest airlines) engine is dripping oil. We were evicted from the aircraft and made to wait for 40 mins. Ours was a connecting flight via Baltimore. Thankfully we had a waiting time of 2 hours at Baltimore and Southwest had a spare aircraft at the airport. So finally Bon Voyage!!

From Boston airport, we headed directly to Sampreeti’s MIT hostel – where we were to stay for the next two days. Her room was on the 19th floor of one of MIT’s oldest hostel(1930s).  One side of the drawing room was mostly a big window pane with an amazing view of Charles river and the MIT campus. We were joined by Sampreeti’s friends Daniel Wiese & Stephenie Scott from MIT & Chris Gary from UMass.  We all headed out for lunch to a popular hangout nearby. Afterwards, Stephenie and Chris showed us around the MIT & Harvard campuses. Harvard was just around half an hour walk from MIT campus. We also had frozen yogurt at the famous Harvard square. Sweet.

We headed to Sampriti’s lab next. Got introduced to her labmates – a culturally diverse international team (a Spaniard, a Japanese etc.). We then went for dinner to an Indian restaurant with them. While waiting for the cabs, a group of students playing scavenger hunt came and asked us to dance with them as part of a task they got – was hilarious. Afterwards, we decided to walk our way back to Sampreeti’s dorm. It was more than an hour long walk & our legs were hurting badly by the end, but we all enjoyed every moment of the journey. Boston is really beautiful at night. The skylines are a sight to behold, esp. from the Harvard bridge over Charles river.  At some point during our walk back, we lost Sid! His phone also apparently died at the same time. We searched around for half an hour and then figured he’d find his way back somehow. Thankfully, Sid had an amazing direction sense. He got a Boston map, figured things out and got back safely.

The next day myself, Siddhath & Alfred toured Boston on our own. We went to Prudential Tower & did some window shopping at the malls nearby. We went to Skywalk Observatory on the 50th floor of the tower. It gives an amazing view of the entire Boston. We were provided with small phone like devices which would give an audio description of each scene – a personalized guided tour that we can pause & repeat as per our comfort. Afterwards we went for the duck tour, a guided tour through the streets and waters of Boston. The ‘ducks’ are amphicars that can be rode both in land and water. The hilarious narration of the conductor ‘Major Tom Foolery’ was one of the key highlights of the tour. We spend time enjoying street performances and strolling the Boston Commons for the rest of the day. We had home cooked dinner at Sampreeti’s place at night.

The boston trip was a really enjoyable and memorable one. I’m really thankful to team LabX for spending the time & effort for organizing such an trip and giving us such a wonderful experience.

Technical meetups in Ohio

The tech community in Ohio is very active and diverse. Thanks to Meetup.com, I’ve been able to discover quite a lot of interesting meetings in the neighborhood.

STARTUP Columbus “Startup Saturdays” – Monthly Meetup – July 27th

Conducted on the last Saturday of every month. I’ve written an entire post about this here. Nice experience.

Columbus CodeJam – July 31st

A casual meetup of people interested in coding. Got to meet a .Net developer, a ruby developer etc among other programmers. Chit chat over pizzas & coke . Also made a good friend – Yemane Abebe, an electrical undergrad from OSU. He was interested in learning web development. We met up in later days to do some website development.

Angular JS meetup – Aug 7th

Hosted by Command Alkon. Got to meet people who actively use Angular JS for production level development. Though the discussion was very technical, they were newbie friendly and gave many pointers to start out with Angular. Also Pizzas, beer n coke.
Like we have WAMP, there is a whole JS based stack  – MEAN stack. Some of the resources I came to know from the meetup:

  • Angular Seed – a skeletal application for starting off with Angular.
  • Yeoman – a collection of tools to help you in scaffolding apps, manage packages, build & test them etc. Helps you quickly create apps using AngularJS,  HTML5 Boilerplate, jQuery, Modernizr, Twitter Bootstrap etc.
  • Lineman – similar to Yeoman, but comes with various settings preconfigured.
  • Batarang –  debugging tool for AngularJS
  • Egghead.io – detailed video tutorial series on AngularJS. Also http://www.davemo.com/
  • Sample contact app – maintained by one of the developers from the meetup

 Python DoJo – Aug 9th

This was an interesting meetup as well. It is conducted every friday at 6PM (planning to be a regular). I met Kenneth Wee, co-founder at ZoopShop. Also many interesting python coders. They were keen to help me jump-start my Python adoption. Provided me with references, tutorials, books and in fact a laptop to try things out during the meetup. Had a really awesome time. There was an after-meetup party as well but I couldn’t stay for it as it was getting late and the place was a bit far off. Key resources I came to know:

  • IPython Notebook – A standalone python server that provides a complete coding environment with features to even share our work, plot advanced graphics etc.
  • ReadTheDocs – easy documentation for everything.
  • OverAPI – collection of cheat-sheets for lots of languages.
  • PyVideo – video archive of python related talks
  • Project Euler – an interesting set of mathematical & programming questions. Makes a great compliment to IPython Notebook for learning python. Presently in the process of trying it out.
  • VirtualENV –  A tool to isolate various Python environments & avoid thus avoid version conflict for packages.
  • PEP8 –  styling guide