Monday 17 June 2013

What are the best sources to learn web coding (in a short time)?

 This entire article is adapted and added here for reference from the following site

It is a wonderfully well written article and I expect it would help some of my tech inclined readers.  

THIS ARTICLE IS IN NO WAY MY OWN AND HAS BEEN COPIED AND PASTED FROM THE WEBSITE LINK GIVEN ABOVE AND ALL CREDIT GO TO THE BLOGGER OF SAID SITE.

Starting web development and making a demo for your start-up, I think that is fairly easy. Currently there is a trend to spend months looking for the perfect Tech guy to be Cofounders with. I think it is just stupid - it is probably easier to start working on your product and while you are doing it; attract techies from the very platforms that you are learning from.

Now I am a hobbyist-techie and hoping to start on the professional-techie path very soon. I have been developing sites for the past 4 years and it is very rewarding.

Before everything, where to go?

  1. StackOverflow when you have a specific programming query
  2. Quora when you have architectural design like doubts
  3. SmashingMagazine when you want to get inspiration from other awesome sites and see good design tutorials + free resources
  4. Mozilla Developer Network when you are looking for documentation and tough tutorials on coding
  5. WebPlatform is like MDN but cleaner and better and younger. It may be too young at the moment and may lack some information but it will grow and become one of the best platforms for documentation and tutorials.
  6. Hacker News when you just want to see great people talk and not disturb them. Oh and this is one place where you also get the best start up information with detailed reviews and what not. Quality of discussion is so frigging awesome that you just don't want to ruin it by adding mediocre thoughts to it.
  7. Dochub.io when you need to know what parameters that function takes or other similar documentation. MDN is slower for these queries.
  8. Google / DuckDuckGo - Google, you know is great. DDG is awesome for programming related queries. It gives answers right then and there.

Where shouldn't you go?
  1. w3schools - While they are always the top on Google Search they have an outdated site. They might have good resources for some of the technologies but it will be hard for a reader to know when to trust it and when he/she shouldn't.
  2. Reddit - You will not be able to distinguish when you are being trolled and when the person is actually helping you out. There are decent subreddits like programming and web_design. If you can handle reddit it's great - it just takes a lot more effort than many other sources.
  3. Any site that doesn't look like it was made in last decade. Quick quality check:
    • All the code should be in perfect formatting
    • All the code should be brilliantly highlighted
    • The paragraphs should be well formatted and content should look neat overall
    • Too many links on the page, go away
    • Too many banner ads on the page, go away


Okay, so what do you need to learn?
  1. HTML - the very core of it all is HTML. If you care about the full form: Hyper Text Markup Language. As the name suggests, it is a markup language. It is used to distinguish some parts of your page from others. You will use
    <h1>
    tags to mark important headings,
    <p>
    for paragraphs and what not. The basic principle is simple: the document is like a tree, a node below, sort of inherits the properties of the parent.
  2. CSS - the makeup. Because beauty that lies in the eyes of the beholder, is not really there if you don't put effort. CSS is again pretty simple to understand. However it can be tricky to use.
  3. Javascript - because it's cool to be dynamic. HTML and CSS on their own are pretty static. You cannot really capture things, move things, update things without page refresh. Javascript is the language that you will use to bring some life to your pretty doll.
  4. The Server Side - Now, it is very likely that you will be making a dynamic content site. A site where you will present different users with different content or different content based on where the user is. Most likely you wouldn't want to manually code every single page and every single paragraph of it all. This is where you will use server side technology. You see, HTML-CSS-JS are just client side presentation stuff, your actual content will lie on servers in databases and you will use some server side language like PHP, Python, JS, Ruby, Java, Scala etc to get information from the database. And here comes another challenge: the communication between your server logic and the database. Usually you will use SQL but there are neater, newer things available that might suit your needs better.
  5. Domains - All things done, this is still a challenge. If you are developing a product - you will probably launch it with a domain of your own. Now buying domains is easy. It is a little trickier to find a good registrar though. As much as you would want to go to http://www.godaddy.com/ (and a lot of people do), they have been criticized a lot in recent past for their stand on SOPA. Protests included movement of all Wikipedia domains to http://www.namecheap.com/. You will often find much cheaper services on the web but I suggest you go to a registrar that has some good reputation for reliability. Note that registrars don't really earn a lot of money from selling you domains but from value added services. A large portion of their earnings are from renewals - check hidden costs and feature prices; a lot of times things look cheap the first year but are insanely expensive next year later.
  6. Hosting - Finding a good hosting service and using it the right way is a very challenging task. There are several types of hosting available:
    • Shared Hosting: The cheapest, most common and easy to use option. Requires the least amount of knowledge and development time. Options are largely PHP based on Apache servers with MySQL support. These options are very restrictive, but on the other hand service provider worries about most of the issues including security. There are hundreds of such service provides which give you web space and bandwidth at about $50 an year. Performance is poor.
    • Platform as a Service (PaaS): Fairly recent addition and getting propular. Google App Engine and Heroku are two solutions. Good for small startups and apps that can suddenly go viral. Service provides give a wide variety of packages, libraries and tools to build on. Requires more effort to deploy things than Shared Hosting but a things are a lot less restrictive. Unfortunately these solutions are costlier to maintain when you exhaust the free quotas.
    • Infrastructure as a Service (IaaS): You will get Virtual Machines that you can do absolutely anything with without worrying about uptime, hardware maintenance and upgradation. Scaling is not as easy as in PaaS and neither is deployment, but it is cheaper. It is also more open and you have complete control over the entire stack.
    • Self Hosting: Not for newbies. At all. It is challenging, requires you to buy servers, bandwidth and static IP; keep things running - day in and day out. This can probably be cheaper than any other solution but it is significantly more work. More than that, it requires you to have confidence as well as experience. Absolute freedom, obviously.
  7. HTTP & REST - Understanding of HTTP is also essential. This is like the theoretical part of Web Development. You might skip this initially, but developing these concepts will not only give you confidence but also bring maturity in construction of interfaces and APIs. http://tomayko.com/writings/rest... is a (controversial because of its naming but) a very awesome blogpost about REST and stateless systems.

    You will also need understanding of HTTP Status Codes, Sessions and Cookies.

Yeah, so where do you learn this crap?
  1. HTML: https://developer.mozilla.org/en...
  2. CSShttps://developer.mozilla.org/en...
  3. Javascript:
    • https://developer.mozilla.org/en...
    • http://www.codecademy.com/langua...
      This is a brilliant code-while-you-learn tutorial. It explains you nearly all the concepts of Javascript in an easy to understand manner.
    • http://yuilibrary.com/theater/
      Look for Douglas Crockford lectures. He is God. I was unaware of the stupidity of w3schools' tutorials and learnt 'Javascript' from there - biggest mistake of my life in Web Development. Crockford changed it all. These lectures are so rich in content that I had to watch them multiple times just to comprehend and tie it all together, or at least the most of what I have learnt.
  4. MySQL:
    http://dev.mysql.com/doc/refman/...
    It is less likely that you will need PostgreSQL or MSSQL as most of the hosts provide MySQL. Almost the differences are visible, you can start with MySQL and than quickly grasp others when required,
  5. PHP
    http://uk.php.net/getting-started
    http://php.net/manual/en/tutoria...

    You are most likely to use PHP, not because it is the best language to code in but because of its ubiquitous hosting. It is also incredibly easy to begin with - unfortunately it turns out that this comes out to be an issue later. There are various frameworks that may make your application code a lot more structured and remove the need for template coding: Symfony, Zend, CakePHP and CodeIgniter are some of them. Most of the frameworks that you will find will be MVC - it is the modern way of web application architectures. MVC stands for Model - View - Controller; you can read about this more on wikipedia: http://en.wikipedia.org/wiki/Mod...
  6. Javascript Libraries and frameworks
    You don't want to code Javascript yourself. It is tricky to get it right in a browser, trickier even to get it right in all. There are libraries like JQuery, Mootools, YUI Library and Prototype, that have easy to use pre-built functions and utilities that you can use for most small things. They are also extendable with a large set of plugins and extensions that increase the functionality even more.

    Now, even this is not sufficient at times at your client side JS might still got out of hand and become impossible to manage. Frameworks like Sencha and Backbone.js can help you with structuring your code in comprehensible patterns.
  7. XAMPP
    http://www.apachefriends.org/en/...
    Sure you can learn all these, but how will you test it? Setting up XAMPP on your local machine is one of the easiest ways to get the complete stack of technologies: Apache - PHP - MySQL on your machine.
  8. Python and Django
    If you choose to be a little more adventurous, you can start with Python and Django instead. Python is a neat, beautiful, only-one-way-to-do-one-thing, functional language that will make it easier for you to build complex systems.

    Official Python tutorial, I think, is a good resource to start with: http://docs.python.org/tutorial/ Google's Python class has also gotten good reviews: http://code.google.com/intl/sv/e...

    To develop web applications with Python, people generally use Django (https://www.djangoproject.com/). Django is quick, it's brilliant and it is widely used. You will find enough resources online and enough support on various forums.
  9. Java and Google App Engine
    Java is everywhere and people use it for everything. One good way for developing a demo is to use Java and host it on GAE (https://developers.google.com/ap...). GAE offers free hosting for smaller applications and decent amount of integration with Google Technologies like Contacts, Mail etc so that you can quickly create a social layer on it. Of course, if you need to add Facebook integration you will have to do it on your own. However one major issue is that GAE only supports NoSQL a datastore (API to BigTable, AFAIK). You can read about NoSQL here:http://en.wikipedia.org/wiki/NoSQL. Note that for most use cases, you do not really case much if the database if SQL or NoSQL. But since SQL databases are everywhere, people generally feel more comfortable with them.
  10. NoSQL databases and Cache Stores
    Previous point reminds me of adding this, for bigdata you might need NoSQL databases (http://en.wikipedia.org/wiki/NoSQL). There are various types of NoSQL databases (example graph, document etc) but key-value stores are the most common.
    • Cassandra, BigTable, HBase are some large scale Key-Value stores
    • Key-value stores are also often used as in-memory storage for caching purposes. Redis and memcached are two very common names in this sphere
    • CouchDB and MongoDB are two document stores that are also insanely popular

Now some alternative server side languages that I have zero/negligible experience with:
  1. Ruby and Ruby on Rails
    http://www.ruby-lang.org/en/
    http://rubyonrails.org/
  2. Javascript and Node.js
    http://nodejs.org/

No comments:

Post a Comment