Learn a framework for developing web applications. Specifically, learn Django.
This is because most new applications are web applications, and because you can write a satisfying application without knowing much. Also, you get immediate feedback on your code—you can see whether or not the app is coming out the way you want.
Django is recommended because (a) it is written in Python, (b) it is relatively popular, and (c) it is similar to Rails, which is very, very popular and thus easy to get hired for.
(in parallel with 1) Decide on an application that you want to write, and write it. Put the code on Github or Gitorious or Bitbucket (as you go—not just once you finish).
If you are exited about getting involved in free and open source software, it’s usually best to work on a project that you actually use. That way, you at least understand some of how users expect the program to work. Unfortunately, the programs that you use are likely to be the ones used by zillions of other people, so much of the low-hanging fruit will be already plucked. But maybe you have a more obscure interest which involves software? For instance, I have added features to electronics schematic software, vector graphics software, an interactive fiction virtual machine, a search engine, and a bunch of other random stuff. If you don’t see a feature you want to add or a bug you want to fix, just take a look on the bug tracker and see if anything catches your eye. Don’t worry if you can’t fix any given bug; if it were easy, someone would have done it already!
This is because most new applications are web applications
Or smartphone/tablet apps? Many of which are just web apps reskinned for a phone, but there’s a lot that aren’t. But I don’t know the industry enough to say which is bigger these days, in terms of either developer jobs, or new ideas waiting to be plucked from the tree of knowledge.
I’m a mobile & web & backend developer & startup founder, and I will strongly claim that mobile is the future and that web apps are dying. Backends are still ridiculously useful, but they’re much more in the form of an API.
My recommendation to the OP would be to learn another language, and make that language Objective-C or Java (depending on what kind of smartphone s/he has), and practice building apps with Python backends.
That’s totally a big area, yes. And if it’s what excites Chris, then he should totally go for it. But it isn’t my first recommendation, because most mobile apps are written in Objective C or Java, while Chris has learned Python. There’s a fairly large amount of new stuff that one has to learn to transition from Python to a statically typed language, so it’s not the most efficient path to a working app.
(It doesn’t feel that different if you have been programming for a while, especially if you learned a statically-typed language first, but you’ve probably forgotten about having to learn about covariance/contravariance/invariance, or about memory allocation, or about type-casting).
After short googling, perhaps this could be interesting: http://kivy.org/ An open-source Python library for making programs that run also on Android and iOS.
Oh, and one more thing: Consider taking the Algorithms and Data Structures class on Coursera. It will make you a better programmer, and help you with job interviews. When I am interviewing programmers, I always ask candidates to name any algorithm or data structure and tell me how it works.
Learn a framework for developing web applications. Specifically, learn Django.
This is because most new applications are web applications, and because you can write a satisfying application without knowing much. Also, you get immediate feedback on your code—you can see whether or not the app is coming out the way you want.
Django is recommended because (a) it is written in Python, (b) it is relatively popular, and (c) it is similar to Rails, which is very, very popular and thus easy to get hired for.
(in parallel with 1) Decide on an application that you want to write, and write it. Put the code on Github or Gitorious or Bitbucket (as you go—not just once you finish).
If you are exited about getting involved in free and open source software, it’s usually best to work on a project that you actually use. That way, you at least understand some of how users expect the program to work. Unfortunately, the programs that you use are likely to be the ones used by zillions of other people, so much of the low-hanging fruit will be already plucked. But maybe you have a more obscure interest which involves software? For instance, I have added features to electronics schematic software, vector graphics software, an interactive fiction virtual machine, a search engine, and a bunch of other random stuff. If you don’t see a feature you want to add or a bug you want to fix, just take a look on the bug tracker and see if anything catches your eye. Don’t worry if you can’t fix any given bug; if it were easy, someone would have done it already!
Or smartphone/tablet apps? Many of which are just web apps reskinned for a phone, but there’s a lot that aren’t. But I don’t know the industry enough to say which is bigger these days, in terms of either developer jobs, or new ideas waiting to be plucked from the tree of knowledge.
I’m a mobile & web & backend developer & startup founder, and I will strongly claim that mobile is the future and that web apps are dying. Backends are still ridiculously useful, but they’re much more in the form of an API.
My recommendation to the OP would be to learn another language, and make that language Objective-C or Java (depending on what kind of smartphone s/he has), and practice building apps with Python backends.
That’s totally a big area, yes. And if it’s what excites Chris, then he should totally go for it. But it isn’t my first recommendation, because most mobile apps are written in Objective C or Java, while Chris has learned Python. There’s a fairly large amount of new stuff that one has to learn to transition from Python to a statically typed language, so it’s not the most efficient path to a working app.
(It doesn’t feel that different if you have been programming for a while, especially if you learned a statically-typed language first, but you’ve probably forgotten about having to learn about covariance/contravariance/invariance, or about memory allocation, or about type-casting).
After short googling, perhaps this could be interesting: http://kivy.org/ An open-source Python library for making programs that run also on Android and iOS.
Oh, and one more thing: Consider taking the Algorithms and Data Structures class on Coursera. It will make you a better programmer, and help you with job interviews. When I am interviewing programmers, I always ask candidates to name any algorithm or data structure and tell me how it works.