This type of question is asked a lot, so I want to begin with the disclaimer that everyone is different and the real best project to begin with is something that you have a personal interest in, or that helps you professionally. For example, I taught myself jQuery by creating http://sleepyti.me -- which is now profitable enough to pay my rent.
If you don't have an immediate need for software -- whether it be a webapp, or (more likely with Python) a script that organizes files on a *nix system, you have two viable choices: open source contributions or 'challenges'.
Open source contribution is by far the best way to propel yourself into software development, but the problem is that it can be very advanced for the neophyte programmer. If you can find a project to take you under their wing, that's awesome; more likely, you can set this as an eventual goal of your programming experience.
A second choice that I personally have found intriguing is the 'challenge' approach. Completing challenges such as Project Euler or various Code Katas that you can find (don't worry if they're in another language specifically, you can simply use your language of choice to complete them) shows progress and presents you with real, challenging scenarios to deal with. Code Katas tend to let you learn the language most practically, where as Project Euler problems are generally more math and algorithm-development based. Either way, these challenges are fun and generally rewarding.
I wish you luck on your question to master software development; there are few feelings in the world as satisfying as creating a useful, clean piece of software.
It does, but only because there is a significant amount of traffic -- about 30k hits per day. I answered the other question in a more in-depth fashion since he asked me to expand on the site/idea in general, so you can find more info there. Just didn't want you to think I was ignoring the question!
I created http://sleepyti.me for a couple of reasons: first and foremost, I am not a morning person. I read with envy all of the HN posts about morning pages, getting up early with a cup of joe to be productive, etc. I am usually a groggy mess in the morning.
When I learned that you could time sleep cycles to reduce sleep intertia by waking up in between cycles, I immediately saw how it could help my life. Originally, I had written a shell script to help me personally (refre.sh to wake up refreshed), but it was difficult to distribute and my friends on a non-unix based OS couldn't use it at all.
I had recently been wanting to try my hand at developing web applications, and had decided to try jQuery. I am a security engineer and most of the code I write is for backend systems; basically, I'm not a design guy.
I learned jQuery and created sleepyti.me initially as a 'weekend project' (which, way back when, HN and reddit.com/r/web_design gave me feedback on) which I then expanded on until it was something I liked. I'm now in the final stages of developing an iPhone app (because of incessant demand via email) and soon Android, Windows Phone 7 and Blackberry versions.
The money comes in because of the traffic I've gotten. Someone (not me) submitted sleepyti.me to StumbleUpon very early in the site's lifecycle, and it has been quite popular there. I put a Facebook Like button on the page to try to drive the site socially/virally/"organically". This brought me between 10-15k hits a day -- a lot for a weekend project.
About two months after launch, someone (not me) submitted to Reddit's Today I Learned subreddit (regarding sleep inertia), which drove 250k+ hits in one day. After this event, my daily hits started averaging around 30k hits per day, which is where they are stable now.
Although obviously only a tiny amount of viewers click my banner ad, with an overall traffic amount this large there are bound to be people interested in whatever Adsense has spewing up. Additionally, I only show my banner ad after the calculation has occurred, so viewers don't have to suffer through ads. I've gotten emails from Google (automated of course) advising me to increase the banner count on the site, but I don't want to further bother viewers. If they're interested, they click; if not, no pressure.
My eventual goal would be to sell dedicated ad slots to an interested party (for example, a mattress chain that wants my visitors, or an alarm clock manufacturer, etc) or to sell the site at large to one of these entities. I'm not actively marketing it, however, and don't really even know how I'd go about it.
Not sure that you were looking for quite so in-depth of a reply, but I wanted to explain myself as I also saw another posting asking about the profit. Don't worry, I'm not a link spammer :)
Edit: As I seem unable to reply to the reply to this post, I will answer here. The 30k/day is from varied sources, as reddit traffic is generally short lived. I imagine that some of my 'dedicated audience' is from reddit, but a lot of it is users that found it shared on Facebook or located it via StumbleUpon.
I've been wanting to try my hand at developing webapps as well and, like you, will be learning jQuery. What resources did you find most helpful while learning the language? I know the jQuery website itself has some tutorials, but if you have any personal suggestions, I'd be very much obliged.
The tutorials listed on their site are great to get something semi-functional, and I already knew HTML design so I could sort of throw things in tables to put them where I want them. I'm learning CSS3 now, so hopefully future projects will look a little prettier. I think this is one of the tutorials I used (if not, something similar): http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery
The jQuery docs themselves provide in-depth examples and live demos, as well as well-written docs. The ones I found particularly useful were .get() for requesting PHP pages (although sleepyti.me doesn't use this) or loading dynamic data, .val() to check the value of an input and .html() (and append()) to append HTML to values in the document. fadeIn() and fadeOut() are nice for bringing pages into and out of view.
All in all, I was extremely impressed with how easy jQuery was to learn, and I'd recommend it to anyone with any kind of a development background looking to get into web design. If you have any questions, I've had excellent luck with simply searching stackoverflow.com. There's an answer for pretty much everything you could need on there :)
My first Python app was a Windows automation script that took a data dump from SQL Server and ran it through Tableau's data visualization software, to produce a daily report on various metrics our company was interested in.
The enterprise Tableau product was outside our price range, so this was a good way to hack together a solution using the desktop version and our raw data from SQL Server. As it so happened, Python turned out to have the best libraries for working with output from SQL Server, automating the opening and control of the desktop Tableau app in Windows, and then formatting certain Excel output appropriately (some of the data was graphs, some of it was direct output to Excel in a complex pivot table format).
Python is really powerful for a whole host of things. As people have pointed out, choose a project that you want to get done, and then start coding it. I have never liked just trying to cram through an entire O'Reilly book, for instance. It's kind of like reading an encyclopedia cover to cover. Much better to focus on a problem that might incorporate a few different competencies.
Personally, the tabbing in Python drives me nuts. Working in it convinced me that I really like brackets. I'm sure I'll get flamed for this comment, but I think it's just a mental processing thing. Some people work well with white space (VB being another example), others don't. I've always liked being able to use brackets as a reference point. Whitespace doesn't do it for me, even if I have the tab characters show up in code.
Everyone here's already given solid advice to you, so I'm here to offer my two cents from a slightly different perspective.
In "Outliers", Malcolm Gladwell points out research that indicates there are three requirements for a job to be satisfying: "autonomy", or you getting to decide what you will do or how you will do, "complexity", that the job is full of tasks that engage you emotionally and intellectually at a "Goldilocks" difficulty level (not too hard, not too easy), and "connection between effort and reward", i.e. the harder you work the more you get rewarded.
In my experience, while learning new programming languages, frameworks, and software engineering concepts, since my learning happens in my free time I have bucket loads of autonomy but I often misguage the complexity level and sometimes fail to offer myself any opportunity for reward in the long run.
Hence, here are two more pieces of advice. Firstly, work on a real project, ideally for a person in real life. Someone who breathes, feels, and is willing to drink coffee with you. Ask _them_ what they want, tell them you're trying to pick up a new skill and want to help them out! What better connection between effort and reward can there be than helping a real person? (I hear people saying "money, money, money!", and yes I hear you).
Secondly, start at rock bottom and learn everything from scratch. Assume you know nothing. Be the proverbial empty cup; a student approaches a Zen master with a cup and says "Master, teach me everything you know!" and the master proceeds to fill the student's cup with tea until it starts to overflow hot water onto the students hands. The student looks confused until the master responds "How can I fill your cup when it is already full?". Then, once you get started, offer yourself increasingly more difficult challenges and concepts. Continually progress your knowledge. Even in a language as sublime and as easy to initially use as Python there are always more concepts to learn, more elegant approaches, faster methods.
The first project I worked on where I felt like everything sort of 'clicked' with Python was a client/server based application, in which I wrote both the client and server.
I had a simple server daemon that ran on systems I was maintaining at the time, which would gather obvious statistics for system status where, in most places, you'd just be able to install munin, or some other OS monitoring utility, but I couldn't, for reasons I won't bother getting into.
Instead, I was perfectly okay to write a server that listened on an arbitrary port, and a client that swept through all the registered servers, getting information from them and displaying them in a GUI.
This had the added benefit of reinforcing my understanding of UDP/DGram, which are probably still weak, but definitely better than they were.
If you want to do web development, the google app engine is very good if you just want to "dive in". The dev server just works, and you can start a small project for free.
Just be aware, the App Engine is not a great choice for every project. Simple things are really easy, but moderately difficult things are damn near impossible. But it's a good way to get started.
Don't let that put you off though. You need to learn a heap to do web dev, and anything that cuts down the initial complexity is a boon.
They purposely force you to write google-scale code, which isn't necessary for an early stage startup. If you hit the ceiling of what you can do easily, you will have to switch to django, or do some hardcore appengine stuff - don't write too many relations, just denormalize. Want to keep a counter? Bad idea, use sharding. Want to sum up a database column? They advise you to use map-reduce. It's all good advice for a super-scale app, but you probably don't need it.
I learned Python on App Engine. After a couple of projects I got paranoid about "lock in" so I rented some server space and learned vanilla Django and did a few projects. Only then did I learn to appreciate App Engine.
Fast forward a couple of years, whenever I need a server for a mobile/desktop app I'm building I use App Engine. For many things, especially if you're just starting out, you can't beat App Engine's ease of use and cost.
I have been programming for last 8 year, however, both python as well as app-engine was new for me. Below after few posts i have written how i learn python so i dont want to repeat here. However, i think python on app engine is boon for python beginner like me. Since i have worked on cake-php and ruby on rails i found webapp also somehow similar. My website www.lolzwow.com is live and getting good number of hits, however, i don't have to pay a penny and statistics shows that free quota can handle still more traffic than what i am getting now. So, python app-engine is a good gift from google to python community. Thanks Google
Python-appengine is really cool. However, i wish they provide full text search soon. I am using whoosh-appengine search which work fine for me. I am not sure whoosh-appengine search fit in all use case or not. Can you make it clear, for what type of projects app-engine is not a good choice?
IMO, starting with Django or App Engine or the like to learn Python is like learning to write poetry in French before you have the basics of French.
I think it's best, for N days, to focus just on Python itself. Learn the basics of the language. Then for another M days work on a simple problem that's meaningful to you. Iterate, and play around with different ways to accomplish parts of your program in Python.
Then learn a framework or CMS or javascript library or whatever you like.
My first Python program extracted email addresses and names out of any of one's imap accounts' messages, and put them in ldif format, ready for import into any email client (that understands ldif). I already knew a bit about imap and ldif.
I learned the basics of Python, data structures, list comprehensions, unit testing, etc. As a newbie I went overboard on different coding techniques, but that was partly the point, in addition to creating a working program that was useful to me.
I good project would be something related to your work to say increase productivity or enhance something. I started python doing automation scripts for PSS/E ( simulation program for electric power systems). Or create a game - sudoku perhaps. The point is start doing something and the learning goes along with it.
Once you start building, you'll run into all sorts of hard things. You start doing research on one thing and all of a sudden it's not so hard anymore. It's all baby steps.
Starting with the simplest idea you have in your mind will be the best way to learn python.
Let me share my story, I started thinking about learning python two months back. My brother has been using python since last four years, so i asked him how should i start.
His answer was simple "Learn it by doing". Stumbling with different ideas for a week i came up with a simple idea to write a script that collects publicly shared videos in facebook (I love viewing videos shared in facebook). I have been programming since last 8 years but this was first time i wrote a script in python. I got very excited when 20 lines of python script collected thousands of videos shared in facebook. Next day i shared my script and results with my brother. He was really excited and i asked him to help me to extend the project to collect the interesting videos shared in social media. After the iterative process of learning and refinement of idea, we built http://lolzwow.com.
My idea of learning python by writing simple script that collects videos evolved into a complete site that collects and features Funny, Amazing, Inspiring and Interesting videos shared in web. On top of all i learned Python (one of the most beautiful language i have encountered so far)
By sharing my story, I want to say
1) Start with simple idea that can be converted into computer program
2) If you have someone who knows about python, ask for help
3) If you have any questions that confused you, join python IRC on freenode. From my experience, I can say people in python IRC channel are the most helpful people that i have encountered in any IRC channel. I really love python folks out there in #python channel.
4) Learning by doing encourages you and highly reduces static friction that every people faces when learning new thing.
If you don't have prior knowledge of programming I suggest to go through Introduction to Computer Science and Programming video lectures made available by MIT OCW
http://bit.ly/bdRzad.
Thanks for your story. I have no prior knowledge of programming. So is it good idea to dive directly into Introduction to Computer Science and Programming video lectures?
Yes, those videos cover from very basic of programming to quite advance stuffs. If you follow all in sequence i think it wont be a problem. So, i suggest you to take first two lectures if that helps you then go for remaining.
Anyway i think python is good programming language to start with.
All the best
You learn by solving riddle-like puzzles and then applying functions from the standard library once you know what to do. The riddles make it memorable and more of a 'doing', discovering process so it will stick in your mind more. You'll do stuff like write scripts to query web servers and log the responses.
Also for just getting started have a look on YouTube for Stanford Programming Paradigms with Jerery Cain, I think it's lecture 24 where he introduces Python to the class and gives a very good run-down of the language characteristics, demoing with the command line shell.
I'd suggest trying out Google App Engine: the SDK runs locally on your box, but it is very easy to publish it to their servers for no charge.
I think it might be a good starting point because it is so self contained, one of the toughest things with starting a new language is that so much of the documentation seems like an argument over the "right" way to do things or which library to use to perform some function.
With GAE it is all in one place, the documentation they offer is solid and because the environment is so set it is easy to ask and get help.
I'm surprised no one has mentioned that you can just launch Terminal.app on OS X and enter 'python'. Or edit a file, save as <file>.py, run it through "python <file>.py" to see immediate results.
A little more complicated: download the Google App Engine SDK, start developing Python webapps on your workstation. You don't ever have to deploy it if you don't want to.
If you already know the basics of programming and have any interest in web development, give a framework like Flask or Django a try. Neither of those really obfuscate Python much and both have great documentation. Even if you're not into web development, I would still recommend looking into a web framework, just to learn a bit about MVC if nothing else.
For learning the nuances of a language fairly quickly, I recommend http://projecteuler.net/. Start at number one and work your way up. You'll learn a lot about the language in just a few short exercises.
I 2nd that emotion. If you are interested in Web apps, you might try creating with an old school CGI ecard site. It will introduce many basic concepts: working with the file system (images, thumbnails, etc), CGI, handling form data, doing simple database CRUD, and sending email. If you want to get fancy, you can build your own simple MVC framework in a few hundred lines.
If you don't have an immediate need for software -- whether it be a webapp, or (more likely with Python) a script that organizes files on a *nix system, you have two viable choices: open source contributions or 'challenges'.
Open source contribution is by far the best way to propel yourself into software development, but the problem is that it can be very advanced for the neophyte programmer. If you can find a project to take you under their wing, that's awesome; more likely, you can set this as an eventual goal of your programming experience.
A second choice that I personally have found intriguing is the 'challenge' approach. Completing challenges such as Project Euler or various Code Katas that you can find (don't worry if they're in another language specifically, you can simply use your language of choice to complete them) shows progress and presents you with real, challenging scenarios to deal with. Code Katas tend to let you learn the language most practically, where as Project Euler problems are generally more math and algorithm-development based. Either way, these challenges are fun and generally rewarding.
I wish you luck on your question to master software development; there are few feelings in the world as satisfying as creating a useful, clean piece of software.