programming
Learning programming
-----------
-----------
Skills to develop:
- C++
- STL - http://www.sgi.com/tech/stl/
- Closure - http://en.wikipedia.org/wiki/Closure_(computer_science)
- Protocol Buffers - http://code.google.com/p/protobuf/
- Operational Transformation - http://en.wikipedia.org/wiki/Operational_transformation
- XML
- HTML
- CSS
- Javascript
-----------
Google has these courses and tutorials to learn.
Here are the foundation skills needed to learn:
-Natural Language Processing
-AI
-Web development
My take:
Artificial Intelligence (AI) (ie. Machine learning and natural language processing) is a highly specialized field that requires a strong foundation in:
-Object oriented programming
-Data structures
-Databases
-Algorithms
My AI Class: http://pages.cs.wisc.edu/~dyer/cs540/ They post all the practice exams/practice programs online and they have links to "other courses" or "getting started."
The "easiest" platforms would be Python or Ruby on Rails
-Here is a list of Python introductions for non-programmers: http://wiki.python.org/moin/BeginnersGuide/NonProgrammers
-Here is the "ROR" and "Introduction" tag on del.icio.us:
http://del.icio.us/search/?fr=del_icio_us&p=ROR+introduction&type=all
Scripting:
-I think PERL is the standard scripting language
In General:
-Learning programming is a major commitment. It requires an awkward obsession with multiple layers of abstraction and pure problem solving. It is not a very "people oriented."
-Programmers with a strong understanding of other fields (business, industry, project management, etc.) and strong communication skills are highly unique. (Great article on this topic: http://pmarca-archive.posterous.com/the-pmarca-guide-to-career-planning-part-2-sk
-One final thing - Any aspiring geek should read Hacker News (or StackOverflow)
My Friend's RESPONSE
On Wed, Jun 04, 2008 at 07:48:33AM -0400, Nitin Julka wrote:
> He is is wondering what foundational skills he needs to learn for:
> -Natural Language Processing
If you are interested, taking cs224N would be a good idea if you want to learn about NLP. Note that this isn't an introductory CS course and requires a background in data structures (cs106) and ai (cs221).
The current fad in NLP is using stochastic models so you'll be well served by learning about the following topics as well:
* Bayes nets
* Markov Models
* Linear Algebra
* Information Theory
* Machine Learning
> -AI
NLP is a sub-field of AI so you'll have a lot of overlap. If you take the following courses you'll get a really great foundation.
cs221 (overview of AI, enough info theory to get by; similar to cs540 mentioned by nitin), cs228 (bayes nets/markov models), cs224n/cs224u (NLP), cs229 (machine learning).
> -Web development
This you can pick up on your own with some reading if you like.
To do client side development you'll need to learn three technologies:
* html
* javascript
* css (cascading style sheets)
In order to do server side development you'll need to learn about databases (eg: mysql, mssql) and any one of the following:
* php
* python
* java
* perl
* asp
* ruby
* c++
* [just about any other language]
Lots of books exist on these standards. Unfortunately I don't have good recommendations for good books to get you started.
> -Learning programming is a major commitment. It requires an awkward
> obsession with multiple layers of abstraction and pure problem solving. It
> is not a very "people oriented" direction
I should echo this point. Learning to program (and about AI in specific) is a big undertaking. Doing it properly will most likely take a smart and highly motivated person quite some time. If you are looking for the fastest path to market, hiring is your best bet. If you want to do an amazing job with the development and are willing to take a bit more time, learning about CS is a great plan.
Good luck! :)