Giter VIP home page Giter VIP logo

intro-compsci's Introduction

Table of Contents

PURPOSE

This project is meant to give an introduction to computers (I plan to expand to networking and security - and welcome contributions into other computer related fields). However, I don't intend to reinvent the wheel. This means that if someone already has written good documentation, I will link to it. This also means that a large part of the work is already done. What I haven't seen is a resource that takes the plethora of introductory information and put it in one place. I intend to cover theory more than any one language, architecture, or software (I don't care if you think one thing is better than something else).

Intro to programming

TODO: I need to find a good tutorial (or write one) for describing how event loops work so that I can expect people to move from JS and other languages easily. Maybe it is better to rely on patterns?
TODO: I need to figure out how to split some of this out so that someone can go through this in some sort of order (instead of just being bookmarks with comments).
TODO: Someone pointed out this link a while ago. It has sat in a tab for a while and i haven't gotten to look at the links it provides so I'm just posting it now. Note however, that I don't think it worth introducing most to some things listed here like Go and Python 3. http://learnproglang.couch.it/

There is only one way to learn how to program - by programming.

If you go through these tutorials and don't write any code, your return on inventment is liable to be quite small (or none at all). The best advise for learning to program is to write as much code as possible and fail often. If you are afraid your code won't work and haven't tried it because of that fear, you're doomed. When you are presented with code examples, start trying them. Fail alot and learn alot, never fail and learn nothing.

There is also this:
http://www.cprogramming.com/how_to_learn_to_program.html

Video tutorials

Some video tutorials to start with:

  • Basic Javascript:
http://www.w3.org/wiki/Programming_-_the_real_basics

  • This MIT OpenCourseWare class was recommended (and seems to be pretty good). It uses Python and introduces lots of fundamental consepts quite nicely:
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/video-lectures/

  • Douglas Crockford has done some really good talks on js. He goes through computer history, into programming languages, and then onto javascript. This is a very informative introduction:
http://yuiblog.com/crockford/

Text tutorials

The Languages section here gives a nice introduction to a dozen different languages:
http://www.fincher.org/tips/index.shtml

An interactive tutorial for python programming:
http://www.learnpython.org/

Natural Language Processing with Python (Book) - Natural Language Toolkit (this text is so well written, it made me start looking at Python outside of Sage):
http://www.nltk.org/book

Twisted Python - You probably notice that the style of Python (or Perl or C etc) look different from Javascript. This is because Javascript runs in an event loop. This documentation is not meant to show how to write non-blocking Javascript, but to show how an event loop works (other eventing systems include GTK, QT, WxWidgets, POE, and libev in C).
http://twistedmatrix.com/documents/current/core/howto/index.html

The IBM AJAX series of articles:
http://www.ibm.com/developerworks/web/library/wa-ajaxintro1/index.html

Another good set of tutorials (centered around Node.JS and server-side libraries) is:
http://nodetuts.com/

This is somewhat more advanced but JS has very few rules, so you will probably get to reading this pretty soon):
http://robertnyman.com/2008/10/21/javascript-inheritance-experimenting-with-syntax-alternatives-and-private-variables/

Algorithms

Note: You should figure out how much time you wish to spend looking at these. The more time you spend playing with different algorithms will make you a better programmer. However you can accomplish lots of tasks without knowing much about how different algorithms work.

Javascript Libraries

  • JQuery:
http://jquery.com/

    • JQuery tutorials:
http://jqfundamentals.com/
http://tutsplus.com/lesson/hello-jquery/

    • 3rd party plugins for JQuery:
http://jqueryui.com/

  • MooTools:
http://mootools.net/

  • Prototype - looks Perl-ish, but does some evilness (messing with the object.prototype):
http://prototypejs.org/

  • YUI - this does some very cool things (seems to beautify pages too) but it is slow and doesn't have the amount of people using it as jquery does:
http://developer.yahoo.com/yui/

JS tools

Firebug:
https://addons.mozilla.org/en-US/firefox/addon/firebug/

Node.JS:
http://nodejs.org/

A very nice and simple web templating language:
http://handlebarsjs.com/

Help and Community

Search

In order to navigate the internet today, you must know how to find information. There are quite a few search services available. That said, if you ask a question that someone can copy and paste into a Google search and find one of the first few links answers your question, they won't be pleased with you. You've just wasted their time. So, do a few searches before asking a question in any public forum. If you are unsure of this point, Google 'asking smart questions' or see:

Books

With so much information on the web, its hard to recommend buying material that was probably out of date at the time of publication. That said, there are some times where this makes sense. The only type of book that I would consider spending money on are those that cover core language consepts. However, before you start looking at user reviews on amazon and spending your hard earned money, consider reading them on your computer:
http://hackershelf.com/browse/
And then there's the K&R C Programming book:
http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628
(don't buy this, go to the library and check it out - every library should have at least one copy of this book)

Mailing lists

Most projects have a mailing list (https://en.wikipedia.org/wiki/Mailing_list/). If you think you'll be using the project, I suggest you join the mailing list before you actually have a question. This way, you can get a feel for what the community is like, what type of questions might not be appropriate, etc. Most lists provide an archive too, but I think people are more likely to read things sent to their inbox than going through an archive (atleast I am).

IRC

Spend some time learning how to use IRC. For lots of projects this is the best resource out there (and it's immediate). This tutorial looks pretty reasonable:
http://www.ircbeginner.com/index.php
This also seems to have some good tutorials:
http://www.irchelp.org/

Web Forums

There are tons of these. Since some of these forums might not get that much traffic, I'll list a few:

Github

I learn best by example (then I look at the API for clarification). Most projects have examples. However, you can also find fully functional projects on Github.

An Editor

Don't use the editor of an office suite (Microsoft Word, LibreOffice Text, etc) to write programs. Though you might be inclined to use the same tool to write code as you do to write documents, this is generally a bad idea. The exception is if you are already using an editor that has the features you'll want when coding to write documents. There are quite a few editors that are quite adequate for coding. I'm going to try to order this short list of editors from hardest to learn to easiest:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.