Introduction

Main recommendation goes in the left sidebar. Other recommendations right.

Saturday, December 12, 2015

Choose and learn a new programming language: Python


Last Update 7th April March 2016

Announcement:


Please read my later post and recommendation: Learn Javascript Free Course Online with Free Code Camp


  • Numerous Python-related resources here by Luis Solis.
  • Read Atom Flight Manual and download ebook formats here. Atom is a free, open source code editor looks more modern than some, with packages and themes customisable capability.

Web Development with Django Cookbook

Free at  https://www.packtpub.com/packt/offers/free-learning in less than 17 hours.

------------------------------------------------------------------------------------------

Are you a programmer or someone looking to learn a new programming language?

Given the numerous choices, it can be daunting to find the right one.

And there can be a number of reasons and arguments for why this over that, which is not the purpose of this blog to provide a detailed comparisons of them.

However, to help most people decide quickly what they can or may learn generally speaking, this may be possible.

Having dabbled in programming before, I would advise to go for a higher level language for the novice and even become an expert in that e.g Python and Javascript. Why? Because you don't want to spend a long time writing long lines of codes, debugging and stressing yourself out e.g. Assembly language, C. 

As you can see from the graph below, Java is by far the most popular language. However, unless you are young and quick to learn and memorise, a good coder overall, probably it's not a good idea to start with Java. It is not as beginner friendly as some others in my opinion. Then again, do you need to be the best coder in the world to survive?

The languages seemed to be converging over the years, so to make things easier on yourself, why not choose a high level, open source, popular language that is well documented with resources like Python?

Programming language popularity trends for  five languages: Javascript, python, C, C++ and Java. (Credited and thanks to Google Trends)

Programming language popularity trends 2004 onwards to Dec 2015 
Programming language popularity trends Dec 2014 onwards to Dec 2015

My recommendation goes to Python or Javascript instead.

Both are well supported with resources and are popular with the masses. If you do decide to pursue the Javascript path, you may consider taking Senior Web Developer Nanodegree created by Udacity and Google, or start with these free Javascript books or resources here.  In this post, I will discuss/share mostly Python resources in particular. Another reason I like Python is the professional, well organised and friendly-looking site with easy navigation of available abundant information. When choosing a language, you also want convenient support and resources in different aspects, this can be important soon after you start coding and needs help debugging or troubleshooting. Do not take this for granted.

If you wish to learn Javascript instead, please check out this post here:-
Learn javascript free course online (Recommended)

Here take a look at another chart with Ruby - Javascript - Java - Python - PHP, only this time I clicked the Compare to category (programming), and guess which is the only one with an evident steady increase in interest for the past two years?

Only Python has a healthy, steady interest increase for the past few years.

What can you use Python for?

A number of uses apparently including: Web and internet development, building networking applications, scientific and numeric computing such as the Python for data analysis book below, desktop GUIs, education and software development as mentioned here on Python site with more details. Of course, learning Python well may help look for a well-paying jobs and freelancing. If you are wondering which organisations use Python, here's a list.

Learning Python

I like to go for quality, comprehensiveness, practical or projects building, frequent updates, reasonably affordable courses and interesting if possible. To some like me, good quality resources may matter a lot in determining whether to pursue a particular language or not. You might have read people giving up learning programming language because a various reasons such as boring course or book, couldn't find the right next course or skipped over because of the forbidding high course fee. Therefore, I like to map out a possible overview of what might happen next. It does seem Realpython may meet my expectations. Udacity Nanodegrees too.

I also like to map out and consider the possibilities (hopefully not overthink the process) of a learning path, from basics to intermediate and advanced, and where may one go next.I prefer not to look all over the places for quality and systematic educational learning experience;  I hope this is not just for myself but for any reader who may stumble upon this post, because this may help someone save his or her time doing and benefit from the research and keep from sidetracking from the main goal of learning a programming language that may help them in the future long run. This may be important considering the amount of time one may spend researching before even taking the first action step to programming, much like looking for the right place and information about what schools, institutions or courses are offered and which are worth taking leading to what possibilities. 

1. Why use Web2py?
I recommend this if you just want to go Python, learn the basics and all the way to web development. It is not a course, but it is complete with digital ebook, organised vimeo videos, GUI web framework installation package and active support group, all for free. It is really a good learning and coding ground, plus you get to showcase and build site/s driven by python web development framework. This is perhaps my second best recommendation for learning online coding after Freecodecamp course which focus on HTML,CSS, Javascript and its frameworks that comes with free certifications, complete with challenges, personal and non-profit projects, active community support and involves more than ~2000 hours of to complete, with report of hundreds of people already gotten software engineering jobs. Read Learn Javascript Free Course Online with Free Code Camp.

 2. Realpython
Use Promo Code while it lasts: 40OFF4KS for three courses (Introduction, Web Development and Advanced Web Development with Django) for $20 only, $40 less.
I like the concept that they want to keep things practical and interesting, plus they can cover all three aspects without having the student wondering what next after the basics, focused on Python and related. You may want to view/download a copy of the sample chapter here to see if the style is your cup of tea before diving in. This may be a good deal if you want to freelance, or as a stepping board to other specialisation.

Update 19 December 2015:
I understand from Michael Herman, one of the authors of Realpython, that the second course has three large projects and the third is entirely devoted to building a large e-commer projects; that the courses are geared towards preparing students become freelancers with actual cases. Basically, one can expect at least FOUR projects for portfolio building, which can be good because people may not need a plethora of eye-catching projects to be hired, just the popular common requirements.


3. Python Tutorial: Python Network Programming - Build 7 Apps (Optional depending on your interest level)
With over 140 lectures and 14 hours of content, overwhelming good reviews, frequent updates claim and the fact that this is the only one or few resources that provide a systematic guide to learning and practically building 7 networking applications that can enhance one's understanding, experience and portfolio of Python, this is a bargain, don't you think? This is more like going for a niche expertise too, which is an advantage. Redeem Code while it last: FULLCOURSE15 for $15 to get it far less than the usual price. You may also wait for possible $10 promotions. Bear in mind Python Network Programming may be an uncommon learning resource in its way, but know that this is mainly geared towards networking, so if this is not your forte or interest at all, then perhaps it's best not to start this path. A word of advice if this is your choice: Do good only, power comes with responsibilities.

Note: Above are two paid resources that may be considered to learn Python, however, if you decide on taking only free resources, then Udacity also has some python courses (both free and paid Nanodegree) to help you take off. In fact, Google & Udacity has created free courses covering from Web development, Cloud to others (only some are Python related). Nanodegrees that may have Python components include Data Analyst and Full Stack Web Developer. And Nanodegrees can be costly at $200/month, even at 1/2 tuition back by graduation within 12 months. Having said that, there is still one particular free course I like to bring to your attention - Intro to computer science Build a search engine and a social network (Beginner), this may be an interesting and valuable addition to your experience and CV.

Update 14 January 2016:
Udacity released a Nanodegree Plus - Get a job Guaranteed!, within 6 months or 100% tuition back (Only available in U.S. now, read more and look for fine prints). That sounds really good considering how many established or professional courses offline or online can make such a guarantee. To be fair, this is probably the best economical and professional deal or offer for an average IT novice. If you are someone with the drive and determination to commit into Udacity courses, take a serious look, even when you are enrolled with other campus or online courses. But my guess would be, you are probably better off focusing your time solely on completing Udacity courses.

3. Once done with the basics e.g. with RealPython/Udacity the next steps (for depth or specialisations) could be, to separate yourself from the majority competition:

4. Highly Recommended: Again, if you like the pursuing a professional paid courses that is co-created by Google, getting Nanodegree such as Data Analyst and Full Stack Web Developer may be a good idea that might increase your chances of employment or freelancing, though it may not be focused on Python like RealPython. In fact, this may be the best idea for jobseekers to pursue considering that:

  • All the content in Nanodegrees is actually free. 
  • All the previous work in the free courses will be transferred over to the paid enrolment
  • Though may be possible to complete all the the Nanodegree in as fast as minimum two months just to submit projects to get credentials, but probably six months is 'what they say'.
  • Complete Nanodegree in say,. six months  and get 1/2 of tuition back at usual fee of $200/month, so effectively Nanodegree may cost for example USD$600. That could be reasonably affordable to some for quality materials, coaching, and after support, including job placement process, or even the chance to be hired by Udacity
  • Even if you do not enroll for the paid course and just learn from the free content, you can still build an impressive portfolios of projects, which actually are what many are looking for to hire, be it jobs employers or freelance contracts.
But know that none of the Nanodegrees seem to be fully focused on Python only. They require you to learn other topics as well, thus making it seem overwhelming or easy to detract from being focused on Python only. Of course, you can select the programs highly relevant to Python only, but I don't think there is one Nanodegree available now like RealPython's courses that concentrates on Python solely from basics to advanced. Personally, I like to stay focused on the goal on learning one language first for a purpose - one thing at a time, and search resources high and low for completion. To each his own.

5. Github and/or hardware programming. Of course, writing and contributing to open source projects e.g. Github, first with your own projects, is definitely recommended along the way. Let's say one has learned all the way up to advanced topics, then it is absolutely advantageous or essential to have one or more projects in portfolio to give others an idea your work and potential. This is just common sense. Also, do you like to get creative and program small hardware to do simple things? There is Arduino and Raspberry Pi that can help you get started, it can be as practical as you make it to be - be imaginative and do projects that help others!

Which specialisation

Obviously, this may vary according to the disposition of the individuals. One should almost always take the course that he is most interested or passionate about, because when it comes to career or programming life, one year is not long at all, given the amount of knowledge and experience he has to garner before an average person can be considered proficient in the language, and also depending on his learning capabilities. For example, do you like to program games? Do you see yourself developing  advanced websites? Do you like to enhance website/software performance, making them run faster without problems? Do you like testing applications to ensure they are running smoothly? Or do you like data analysis and researching to the point of deriving quality results and arriving at the right conclusive decisions? Or do you not have an idea what you should do at all, then perhaps in this case below chart may give you an idea. Nevertheless, pursue your interest to avoid doing what you dislike in the long run!

Google_Trends_-_Web_Search_interest__data_analyst__web_developer__software_developer_-_Worldwide__2004_-_present

Data Analyst looks to pick up speed and interest even more than software developer and web developer. All performed better than the average Jobs and Education level. Whether it's one or the other, there is a market for it. Honestly, data analyst can be a better choice for jobs hunting than freelancing, while web and software development seem more versatile in both markets. Remember, what matters is your interest too.

Free Python Resources

If you are determined, have a programming background, and feel comfortable enough to work through materials that might be less cohesive overall, then feel free to give these free resources a shot.  


Python Cookbook (Third Edition) Physical Book / Free Online Version




Python Playground (Intermediate)



Fluent Python (Intermediate/Advanced)

More Free Resources 

Get Started With Github
https://www.udemy.com/git-started-with-github
Numerous Python Books and Resources 
http://pythonbooks.revolunet.com
Talk Python to Me Podcast
http://talkpython.fm
Udacity Python Related Courses (both paid and free)
https://www.udacity.com/courses/all?technology=python
A Guide To Python's Magic Methods
http://www.rafekettler.com/magicmethods.html

Not to forget, go here for Python job hunting advice if you are ready.

Conclusion: Why Python?

For those who can invest e.g. $600, Udacity's Nanodegree (Get a job Guaranteed! Conditions apply) is the way to go by completing all their free content and projects first and then enroll to maximise your two months coaching and learning experience and submit the projects to earn credentials. Good for jobs hunting, including Udacity jobs. Nanodegree's after course support might just turn out to be very helpful in your career advancement or job hunt with job-ready project portfolio.

For those who wish to take free quality courses by experts just to build portfolio of projects for both jobs and freelancing, Udacity is also the way to go.  You may like this idea as well!

Free Web2py ebook, videos, GUI learning and development platform and active support is my recommended, straight way to learn python and all the way to web development.

For those who wish for an alternative learning course that focus purely on python Basics, web development including  Flask, web2py and Django, RealPython 3 ebooks guide can be a good deal at $20/60. Perhaps you like the focus approach of covering from basics to advanced web development.

On a side-note: I also included AngularJS and ASP.NET for fair comparison sake, turns out AngularJS is really popular! (Learn AngularJS here with free book, youtube video and magazine, or paid Udemy course here, and free Recipes with Angular.JS online.)


For those who wish to focus on Python Networking, Python TutorialPython Network Programming - Build 7 Apps can be good, hard deal to find. Just be ethical.

Or simply just jump right to this page with numerous free Python and related books or resources as listed by Revolunet.com and start learning from whichever you fancy.

Whichever path you undertake, be really skilful and not just get academic credentials, because that is what others are looking for when we apply for contracts or jobs.

Most importantly, be kind to others.

Good Luck!

Note: Above include affiliate links.

Update 25 February 2016:

Offline Code Editors / IDEs are indispensable to programmers. After tinkering and checking out for the best free or open source solutions preferably to code python and/or html/css/javascript, helpfully this will help save you time and effort or money.  Oh my, I have tested quite some editors to find find the best painless, quick and easy solutions, free or the next best to just start learn coding. Just goggling, glancing or evaluation and setting up of the different IDE or editors (e.g. Vim, Emacs, Textmate, LiClipse - not free and I didn't evaluate, etc) may merit a whole research article itself, but that may detract from the main purpose of just learning programming. So to cut to the chase,

My top Mac App choice is:

Atom.io (preferred)
Free, open source and looks like a modern version of Emacs which can be time consuming or difficult to configure. Just need atom-runner package to run code with control+r and autocomplete-python to complete commands and variables with tab or enter. Cmd+Shift+P, Script Run Options to configure for path to running Python3. Windows version available as well. For windows, perhaps Visual Studio may also be a good, fast and free option. If you are sure you want a free and good solution just for Python programming and won't be using web development, then Pycharm free community edition may be your best option.  Atom interface feel somewhat similar to Sublime Text. Read Atom Flight Manual and download ebook formats here. Good documentation, and growing community presence are all good factors to consider long term using an editor. Plus it's free, unlike some costly annual subscriptions,  and authored/backed by the developer of Github.

Bracket.io
Haven't got to test it out fully yet. But seem a popular choice after Atom for HTML, CSS and Javascript only. Modern,  free, open source code editor.

Sublime Text
Sublime Text seemed to be a promising potential here, but note that Sublime Text 3 is not freeware nor specify a fixed duration for evaluation use. Read good recommendations, after Pycharm and cheaper too. You may like the experience. Albeit someone commented wondering about the whereabouts of the ST developer and when will be the next development release or so.

Eclipse + Pydev / Enthought Canopy
Both are free to download. Users interface and experience preference may be differ and subjective though.

Online Code Editor:
Codepen.io
Good online playground for HTML, CSS and Javascript, free hosting and blogging.

Jsbin.com
Just to tinker around HTML,CSS and Javascript programs online quickly.

Cloud9
Free for basic use. Supports more than 100 languages. Click Run the first time and F5 to run again.  Can easily clone Github Repository, edit and run. Like the simplicity and support for Django. If you want to save yourself the hassle of setting up a local code editor, then c9 is quite a deal. Though I'm satisfied with the ease of Atom for now. Let's say you want to write a book or tutorial about Django and not want to cover the absolute basics of editors but you have to show an easy way to just edit and run the programs without losing the beginners, then c9 can be a good choice.

Host and Run Python Project:
Pythonanywhere / Heroku
Free for basic project hosting with limitations on Pythonanywhere. A free Python/Django deployment platform can be Heroku. Django Girls tutorial here.

References