Learning Paths

With so many tutorials, articles and resources available out there on the Internet, learning new programming language, framework and library become much more easier. However, as much as its advantage, readily available resources have also become its own problem: where should I start?

With so many options available, it can be confusing to even start learning. I present you my learning paths to solve this problem. Learning paths will guide you through learning programs for each subject of your interests. Think of this as a curriculum to the degree you want to get.

Most of the courses are from Pluralsight.com, but this learning paths are not limited to just Pluralsight.com. I also include some free courses from other sources. While I understand that you may have to pay for some of these courses, I can assure you that paying the subscription is worth it (especially Pluralsight!).

I will update this learning paths to include more subjects and courses in the future. Stay tuned!


Level Course
0100 Get the Android SDK (http://developer.android.com/sdk/index.html)
0101 Prerequisite: 0100
Getting Started (http://developer.android.com/training/index.html)
0102 Introduction to Android Development (http://pluralsight.com/training/Courses/TableOfContents/android-intro)
0200 Prerequisite: 0101 or 0102
Android Async Programming and Services (http://pluralsight.com/training/Courses/TableOfContents/android-services)


Level Course
0100 AngularJS Fundamentals (http://pluralsight.com/training/Courses/TableOfContents/angularjs-fundamentals)
0200 Prerequisite: 0100
AngularJS In-Depth (http://pluralsight.com/training/Courses/TableOfContents/angularjs-in-depth)
0201 Prerequisite: 0100
Testing AngularJS From Scratch (http://pluralsight.com/training/Courses/TableOfContents/testing-angularjs-from-scratch)


Level Course
0100 ASP.NET MVC Fundamentals (http://pluralsight.com/training/Courses/TableOfContents/aspdotnet-mvc)
0200 Prerequisite: 0100
ASP.NET MVC 5 Fundamentals (http://pluralsight.com/training/Courses/TableOfContents/aspdotnet-mvc5-fundamentals)


Level Course
0100 Introduction to the ASP.NET Web API (http://pluralsight.com/training/Courses/TableOfContents/aspnetwebapi)
0200 Prerequisite: 0100
Web API v2 Security (http://pluralsight.com/training/Courses/TableOfContents/webapi-v2-security)
0201 Prerequisite: 0100
Web API Design (http://pluralsight.com/training/Courses/TableOfContents/web-api-design)


Level Course
0100 C# Basic (http://csharp-station.com/Tutorial/CSharp)
0101 C# From Scratch (http://pluralsight.com/training/Courses/TableOfContents/csharp-from-scratch)
0102 Prerequisite: 0101
C# From Scratch – Part 2 (http://pluralsight.com/training/Courses/TableOfContents/csharp-from-scratch-part2)
0200 Prerequisite: 0100 or 0102
Object-Oriented Programming Fundamentals in C# (http://pluralsight.com/training/Courses/TableOfContents/object-oriented-programming-fundamentals-csharp)

Entity Framework

Level Course
0100 Getting Started with Entity Framework 5 (http://pluralsight.com/training/Courses/TableOfContents/entity-framework5-getting-started)
0200 Prerequisite: 0100
Entity Framework Code First Migrations (http://pluralsight.com/training/Courses/TableOfContents/efmigrations)

JavaScript & jQuery

Level Course
0100 W3Schools’s JavaScript Tutorial (http://www.w3schools.com/js/default.asp)
0101 JavaScript Fundamentals (http://pluralsight.com/training/Courses/TableOfContents/jscript-fundamentals)
0120 Prerequisite: 0100 or 0101
DO Factory’s JavaScript + jQuery Design Pattern Framework – JavaScript & Pattern Essentials (http://www.dofactory.com/products/javascript-jquery-design-pattern-framework)
0200 Prerequisite: 0100 or 0101
JavaScript Design Patterns (http://pluralsight.com/training/Courses/TableOfContents/javascript-design-patterns)
0300 Prerequisite: 0200
jQuery Fundamentals (http://pluralsight.com/training/Courses/TableOfContents/jquery-fundamentals)

WIF, Claims-based Identity, OAuth2

Level Course
0100 Introduction to Identity and Access Control in .NET 4.5 (http://pluralsight.com/training/Courses/TableOfContents/iac-intro)
0200 Prerequisite: 0100
Identity and Access Control in ASP.NET 4.5 (http://pluralsight.com/training/Courses/TableOfContents/iac-aspnet)
0201 Prerequisite: 0100
Identity and Access Control in WCF 4.5 (http://pluralsight.com/training/Courses/TableOfContents/iac-wcf)
0202 Prerequisite: 0100
Web API v2 Security (http://pluralsight.com/training/Courses/TableOfContents/webapi-v2-security)
0300 Prerequisite: 0200 or 0201 or 0202
Introduction to OAuth2, OpenID Connect and JSON Web Tokens (JWT) (http://pluralsight.com/training/Courses/TableOfContents/oauth2-json-web-tokens-openid-connect-introduction)

Where is jQuery.browser() in jQuery 1.9.0?

From jQuery.com Upgrade Guide:

The jQuery.browser() method has been deprecated since jQuery 1.3 and is removed in 1.9. If needed, it is available as part of the jQuery Migrate plugin. We recommend using feature detection with a library such as Modernizr.

Read more: http://jquery.com/upgrade-guide/1.9/#jquery-browser-removed

jQuery UI Call After Knockout JS Binding (Knockout Custom Binding)

My team was having problem with calling jQuery UI widget, specifically Button widget, to modify the look and feel of the buttons. Our root of the problem is because we are calling jQuery UI before Knockout binding happens. Because our Knockout binding is actually creating more DOM element, jQuery UI call before binding will not apply. For design reason, our jQuery UI code can’t live after Knockout binding.

This is a typical scenario where Knockout Custom Binding comes to rescue, and obviously, one of the use case.

First, we define Knockout Custom Binding:

ko.bindingHandlers.jQueryUIButton = {

    init: function(element, valueAccessor) {

        var options = valueAccessor() || {};




Then, data bind:

<button data-bind="jQueryUIButton: { icons: { primary: 'ui-icon-locked' }, text: false }"></button>

Read more on how Knockout Custom Binding works here… If you are JavaScript programmer, Knockout should be in your tool belt.

jQuery Widget Factory Properties and Methods


The element of the invoked plugin.



Provide options that users can set.




This is where you set up your widget. This method get called first time the plugin is invoked / initiated on an element.

Method to reverse everything the plugin has applied.





Method to respond to changes to options property.


Fire an event that users can use.

Source: jQuery UI Wiki

$(document).ready() Not Working in ASP.Net Page Post Back

When executing client-side script (JavaScript / jQuery) on ASP.Net post back (Page.PostBack) event, such as when users change drop down list, is needed, codes in $(document).ready() will not be executed.

To execute client-side script on Page.PostBack, define JavaScript function called pageLoad(). All code in pageLoad() will be executed on Page.PostBack.

Placeholder Input Field for Non-HTML5 (with jQuery)

Hagenburger has a very nice fix, with jQuery, for placeholder input that will work for all other non-html5-supported browser. You know, the placeholder text is the input field that has text like “Search…” but will will be gone when the input field is on focus.

The fix actually utilize the placeholder attribute of input tag, so after implementing Hagenburger‘s jQuery, the placeholder text will work in pretty much all browsers, old and new.

HTML5 Input Placeholder Fix With jQuery

Return JSON Data Type in ASP.NET MVC for Jquery Ajax Call

I have this javascript (jquery) code to call a url, “Home/Weather”, that will return JSON data type.

function GetWeatherCondition()
        url: "Home/Weather",
        dataType: "json",
        success: function (data) {
        error: function (jqXHR, textStatus, errorThrown) {
            alert(textStatus + " - " + errorThrown);

And this is my Weather controller:

public JsonResult Weather()
    string urlWebService = "http://i.wxbug.net/REST/Direct/GetObs.ashx?la=41.7233&lo=44.7928&&ic=1&api_key=xxxx";
    string urlWebServiceResponse = "";

    System.Net.WebClient weatherClient = new System.Net.WebClient();
    urlWebServiceResponse = weatherClient.DownloadString(urlWebService);

    return Json(urlWebServiceResponse, JsonRequestBehavior.AllowGet);

As you can see, the Weather controller will return JSON object (JsonResult) and the javacsript code will load it in and display data.avgWindDeg. However, there is a problem when I run my javascript code. Instead of data.avgWindDeg, it returns undefined as you can see below:

The Weather controller is actually returning JSON object if I visit the url. So, what’s wrong here?

For some reason, the controller will need to return a JSON string instead of JSON object (JsonResult) for the jquery ajax call ($.ajax()) to understand. Changing my controller to ContentResult instead of JsonResult works like charm.

public ContentResult Weather()
    string urlWebService = "http://i.wxbug.net/REST/Direct/GetObs.ashx?la=41.7233&lo=44.7928&&ic=1&api_key=xxxx";
    string urlWebServiceResponse = "";

    System.Net.WebClient weatherClient = new System.Net.WebClient();
    urlWebServiceResponse = weatherClient.DownloadString(urlWebService);

    return Content(urlWebServiceResponse);

jQuery Cookies (Yummy…)

I found many people get too comfortable with server-side script that even for setting up cookies, they use server-side script. True, some visitors may turn off javascript. But, if your application required javascript, why not setting up cookies with client-side script? It gives you better performance anyway.

Of course, jQuery is the way to go here. The plugin can be downloaded here (The author is carhartl)


After download, you will need to reference to it:

<script type="text/javascript" src="js/jquery/jquery.js"></script>
<script type="text/javascript" src="js/jquery/plugins/jquery.cookies.js"></script>

Set A Cookie

Set cookie named “YummyCookie” that contains “oreo, nabisco, chocolate chips, butter” value.

$.cookie("YummyCookie", "oreo, nabisco, chocolate chips, butter");

Set cookie named “YummyCookie” that contains “oreo, nabisco, chocolate chips, butter” value in which the cookie expires in 5 days and available for the current path level.

$.cookie("YummyCookie", "oreo, nabisco, chocolate chips, butter", { expires: 5 });

Set cookie named “YummyCookie” that contains “oreo, nabisco, chocolate chips, butter” value and available for all paths within your domain.

$.cookie("YummyCookie", "oreo, nabisco, chocolate chips, butter", { path: '/' });

Set cookie named “YummyCookie” that contains “oreo, nabisco, chocolate chips, butter” value in which the cookie expires in 3 days and available for ‘/kitchen’ path level.

$.cookie("YummyCookie", "oreo, nabisco, chocolate chips, butter", { expires: 3, path: '/kitchen' });

Get A Cookie

var _myCookie = $.cookie("YummyCookie");

Delete A Cookie

$.cookie("YummyCookie", null);