Domain: greenteapress.com
Stories and comments across the archive that link to greenteapress.com.
Comments · 46
-
damn it.
OT: When will
/. allow me to edit my fucking posts? It's been like 18 years without this basic functionality. -
Re:Python
I second Python: just type in the pseudocode you'd write on a piece of paper, and there is a good chance that it will work just like that in Python.
2D gaming using SDL (and OpenGL 3D, but you have to do the hard work yourself): Pygame
3D drawing/animation/gaming: Blender 3D
(I started by gaming, because that's a fun way to learn a language quickly)Web: Django
Co-routines: Stackless Python
Maths: NumPy and SciPy
Networking: TwistedThat just scratches the outside of it, but have a look at the above to get an idea of the language.
And Python's documentation is quite good: brief, but everything you need is there - you just need less than you would expect at first. Here are some good tutorials:
Official Python Tutorial
Dive into Python
How to think like a computer scientist?Hmmm, looks like I've turned into a Python fanboi... Be careful if you try Python, you could fall for it.
-
Teach them javaScript for free with CodeAcademy
I've been teaching my 9-year-old daughter programming. We started with http://www.codecademy.com/ learning JavaScript but have now moved on to Python, which she prefers because of the Monty Python references. JavaScript is similar enough to C++ (those annoying semi-colons!) to give them a bit of the flavor, and CodeAcademy makes it easy to give them a taste. On a side note, Python has a great free intro book, Think Python: http://www.greenteapress.com/thinkpython It's not turnkey like CodeAcademy, but it's very well written for someone who has never programmed before. I think Python is easier to learn but it is less similar to C++ than JavaScript, so there are pluses and minuses to using it in your situation.
-
Re:Python
I second the python recommendation. Have a look at this (free, available in dead tree format as well as online) book:
-
Think Like a Computer Scientist
If I was recommending a book for a peer in a non-computer related field, I'd definitely recommend How to Think Like a Computer Scientist, which assumes no programming knowledge and builds up the thought process behind decomposing problems, etc. It's been a while since I read it, but I think it would work reasonably well for an advanced preteen. The version I read used Python, which I think is a great introductory language.
http://www.greenteapress.com/thinkpython/ for a dead-tree version, or in various electronic formats (for free[-as-in-beer-and-in-speech]).
-
Python or JavaScript
I'd first look at KhanAcademy. They have courses on Python. See http://www.khanacademy.org/#computer-science-container Python in general is a good first language. I first learnt it with http://www.greenteapress.com/thinkpython/ But, I would highly recommend Head First books to start learning any language. I think they'd be great for an 11 year old. Head First Python http://goo.gl/tKRMu Another option that has been discussed recently as a good first language is JavaScript. It has the advantage of running in every browser and allows the ability to see nice visual feedback right away. When I was in high school I learnt a bit of Java using , which I also enjoyed because Swing gave me the ability to create GUIs right away.
-
Re:Python
MIT Openeducation: Python for Software Design How to Think Like a Computer Scientist
-
Re:what I did
Agreed. I suggest Python to any aspiring programmer who asks me.
Here's a great place to start.
And another good one. -
Yes. Learn Python
Go play with Python on...
"Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows
to compile and run code online in more than 40 programming languages."Have a book...
http://www.swaroopch.com/notes/PythonHave two...
http://www.greenteapress.com/thinkpython/thinkpython.htmlHave a link to the Python Learning Foundation site...
http://www.awaretek.com/plf.html -
How to Think like a Computer Scientist
If you've never programmed before, then you will likely need to practice thinking in a logical, structured manner. Certainly, you should learn your first programming language while doing this, rather than take any kind of math/logic course. Unless, that is, you really like that sort of thing. Posters above me have suggested starting a project that you are motivated to complete, finding out what language is most suited to your goal, and learning it as you go. This can work, but you may hit a few road blocks:
- When you aren't that familiar with programming, it is hard to know which language is the right one to use. If you have perfectionist tendencies like me, this problem could completely halt your efforts to learn programming. Note: avoid such behavior. For really basic stuff, most languages will be serviceable, but you might get along faster if you use one considered appropriate to your attempted task, simply because more experienced people will know how to fix the problems your run into.
- If you aren't particularly creative, also like me, you may not have any projects in your head just waiting for the right programming language. I find it nice when I'm learning a new language without a project in mind to have assignments with clearly defined goals and reference solutions with explanations.
- If you learn your first language as need dictates, you may end up doing things the hard way because you didn't know that better options were available. A guided tour of the language features is helpful to prevent some of this. This is also where the new way of thinking comes in. As you learn logic and math (while learning programming, as suggested), you will probably learn some pretty basic algorithms for doing common things, and knowing one half-decent way of doing something will keep you from sticking with some horrible way of doing it because you can't think of anything else
To get around all of these potentials problems, I recommend the book Python for Software Design: How to Think like a Computer Scientist , which I used when I first learned to program, back when it had a different title. It is available for free here, under yet another title. It's positive attributes are that it uses Python, contains short problems at the end of each chapter (many with solutions and explanations), and explains various things about math, logic, and algorithms as it goes along. Python is a good first language because it doesn't get into details of hardware, it is interpreted rather than compiled (quicker feedback when you change something), and it has clear, simple syntax that enforces good style. If Python doesn't suit you for whatever reason, I would recommend that you seek out a book that professes to teach you how to think as well as how to program.
I have been assuming that you intended to self-teach, but an introductory computer science course at community college should also work. The quality of your education will depend upon your instructor, but that's not much different than picking up a book and hoping the author knows what he's talking about. I think Allen Downey does a good job, but that's just me.
If you do one of these things, learn a language, and it piques your interest, learning other languages is a good time to find a project you're interested in and learn the appropriate language as you go, already having the proper mindset and background under your belt.
-
How to Think like a Computer Scientist
If you've never programmed before, then you will likely need to practice thinking in a logical, structured manner. Certainly, you should learn your first programming language while doing this, rather than take any kind of math/logic course. Unless, that is, you really like that sort of thing. Posters above me have suggested starting a project that you are motivated to complete, finding out what language is most suited to your goal, and learning it as you go. This can work, but you may hit a few road blocks:
- When you aren't that familiar with programming, it is hard to know which language is the right one to use. If you have perfectionist tendencies like me, this problem could completely halt your efforts to learn programming. Note: avoid such behavior. For really basic stuff, most languages will be serviceable, but you might get along faster if you use one considered appropriate to your attempted task, simply because more experienced people will know how to fix the problems your run into.
- If you aren't particularly creative, also like me, you may not have any projects in your head just waiting for the right programming language. I find it nice when I'm learning a new language without a project in mind to have assignments with clearly defined goals and reference solutions with explanations.
- If you learn your first language as need dictates, you may end up doing things the hard way because you didn't know that better options were available. A guided tour of the language features is helpful to prevent some of this. This is also where the new way of thinking comes in. As you learn logic and math (while learning programming, as suggested), you will probably learn some pretty basic algorithms for doing common things, and knowing one half-decent way of doing something will keep you from sticking with some horrible way of doing it because you can't think of anything else
To get around all of these potentials problems, I recommend the book Python for Software Design: How to Think like a Computer Scientist , which I used when I first learned to program, back when it had a different title. It is available for free here, under yet another title. It's positive attributes are that it uses Python, contains short problems at the end of each chapter (many with solutions and explanations), and explains various things about math, logic, and algorithms as it goes along. Python is a good first language because it doesn't get into details of hardware, it is interpreted rather than compiled (quicker feedback when you change something), and it has clear, simple syntax that enforces good style. If Python doesn't suit you for whatever reason, I would recommend that you seek out a book that professes to teach you how to think as well as how to program.
I have been assuming that you intended to self-teach, but an introductory computer science course at community college should also work. The quality of your education will depend upon your instructor, but that's not much different than picking up a book and hoping the author knows what he's talking about. I think Allen Downey does a good job, but that's just me.
If you do one of these things, learn a language, and it piques your interest, learning other languages is a good time to find a project you're interested in and learn the appropriate language as you go, already having the proper mindset and background under your belt.
-
Re:Python
You might look at Snake Wrangling for Kids or perhaps at How to Think Like a Computer Scientist.
I second Snake Wrangling for Kids. I've been working through it with my 8 year-old son and think it's great, especially for a free download.
-
Re:Python
You might look at Snake Wrangling for Kids or perhaps at How to Think Like a Computer Scientist.
-
"How to Think Like a Computer Scientist"
Dead tree version available soon. GPL licensed, electronic versions available here and here.
I read an older edition of the latter a couple of years ago and found it to be an excellent introductory text. I have no doubt that the new paper version will be well worth adding to your collection.
:) -
"How to Think Like a Computer Scientist"
Dead tree version available soon. GPL licensed, electronic versions available here and here.
I read an older edition of the latter a couple of years ago and found it to be an excellent introductory text. I have no doubt that the new paper version will be well worth adding to your collection.
:) -
Think Python
May I suggest Think Python, which originated as a book written for middle schoolers.
Originally it was called How to Think Like A Computer Scientist: Learning in Python, written by one high school teacher for Java, and translated to Python by another teacher. A collaborative project resulted in the present volume, which is being published in hard copy by Cambridge University Press, but the linked page has a free downloadable PDF.
Written for kids and partly by kids, I think this volume might fit the bill. It's also free, just like Python itself.
Did I mention the book is free? Free?!
-
Re:Logic is programming
I teach a computer science class that uses topics from complexity science (emergence, etc.) to get at ideas in philosophy of science. I am working on a draft of a textbook, Computational Modeling and Complexity Science, which is available from http://greenteapress.com/compmod Check it out and let me know if you have comments.
-
On the importance of Generative Models
Computer literacy is distinct from networking which in turn is distinct from programming [as has been said]. Don't try to teach them all at the same time, and only teach two at the same time at the areas where the two overlap.
The rest of my post is about teaching programming specifically, not the other two (although it may also be relevant to system administration).
Teaching generative models is crucial. What does that mean? It means teaching the causal connections; for one, between what the code says and what it does, and for two between what one piece of code does and what another piece of code does.
Three interesting reads:
- ESR's blog: http://esr.ibiblio.org/?p=316
- A study observing students without programming experience answer a test about the semantics of the assignment operation; those who create a model of what assignment does and applies it consistently do better in class than those who don't independent of what the model is (and in particular independent of whether it's the correct model). http://www.cs.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf
- "The Mystery of b
:= (b = false)", a study about the importance of being able to simulate in your head what the computer does. http://www.cs.washington.edu/homes/reges/mystery/
No matter which languages and tools you teach, and no matter which problems you make the students apply their tools to, help them obtain a generative model, and help them help themselves obtain a generative model.
As for which tools to teach them, I would recommend python. It allows you to go straight to the meat of the matter without having much in the "this part is magic, you're not supposed to understand this". Also, it supports the teaching of multiple paradigms. Procedural and OO programming are its strengths, but you can definitely teach the ideas of functional programming in it as well--it already likes doing things with lazy lists (called generators), such as map-filter-reduce.
There's also a good book, How To Think Like A Computer Scientist, freely available at
http://www.greenteapress.com/thinkpython/thinkCSpy/html/. Be sure to also look in its parent directories.(There are also other programming paradigms or computational models, such as prolog-style declarative programming, string rewriting systems or cellular automatons; python doesn't lend itself naturally to do those, but it should be simple to write a simple string rewriter; besides, I wouldn't suggest teaching esoteric computation paradigms).
So my vote is Python, How to think like a computer scientist, and a lot of attention to the generative models.
If you need an example of real-world python, I'd suggest the official bittorrent client (it'd also give you a good excuse to talk about networking if you feel like it).
Also, try to take something the students already know how to do and show how they are following an algorithm; make them implement the algorithm. Math should be rich with examples (gaussian elimination, computing derivatives or simplifying expressions), but the examples may also be a bit on the boring side.
-
python
Python is a simple but powerful language. Cambridge University Press is about to publish this book by Allen B. Downey. The link above shows a free online version.
-
The little book of semaphores
I can recommend the Little Book of Semaphores, which is freely available at http://www.greenteapress.com/semaphores/
If by "an applied point of view" you mean "give me code that I can cut and paste into my app" this might be a bit theoretical for you, but if you make it through this book you will actually understand what's going on and recognize the difficult problems.
-
the little book
I found Little Book of Semaphores a good read.
-
The Little Book of Semaphores
From an applied point of view this may not help you so much, but it does have a good deal of coverage on proper usage. And plenty of examples.
Green Tea Press -
How to Think like a Computer Scientist
I am a big fan of Allen B. Downey's How to Think Like a Computer Scientist: Learning with Python. It assumes no knowledge of programming, and it takes the reader through the ideas that are central to computer programming while teaching them Python.
It starts by thoroughly defining variables, expressions, and statements and then goes on to teach functions. Conditionals, recursion, and other fairly standard operations are discussed. After introducing each of the basic classes that are built in to Python, the book finishes with an introduction to object-oriented programming. It covers the general concepts of objects and classes and then shows the reader the use and usefulness of classes such as linked lists and stacks, guiding the student through their implementation.
Throughout the book, Downey shows the reader how to develop a programming mindset and teaches effective debugging and incremental development. I found it both informative and interesting reading. The book is replete with examples, and each section has a programming challenge at the end of it to test the skills just acquired.
The book is available for free on the Web or can be purchased as a physical textbook. I have only read the Python version, but the same author has other versions of How to Think Like a Computer Scientist using C++ and Java.
-
Think PythonYour class topics seem so wide and varied, but if you're going to do an introductory programming class, try this book:
http://www.greenteapress.com/thinkpython/.
Its a great introductory programming book, focused on Python. Its coming out in print form soon, if that is a requirement.
-
Re:python
Specifically, the book "How to Think Like a Computer Scientist: Learning With Python" is freely available online (although it seems to have recently been renamed "Think Python: An Introduction to Software Design". It's an excellent resource for first-time programmers; it starts with "The Way of the Program" and shows how to use the command line interpreter, then gradually moves on to control flow, data structures, building GUIs, etc.
You can find it at http://www.greenteapress.com/thinkpython/html/ -
Don't scare him off with C
Get him on Python for starts. There's a good book out there called "Think Python". Its in pdf form right now and will be published in 2009. Its written by a high school computer science teacher who discovered Python when he was trying to teach his students C. The book is a revised edition of another book he did called "How to Think Like a Computer Scientist: Learning with Python".
You can find it here: http://www.greenteapress.com/thinkpython/
-
A free book to learn CS using Python
If you want to teach basic programming skills using Python, there's a very nice free book which can help: How to Think Like a Computer Scientist: Learning with Python
-
Practical C
When I learned C it was as an independant study in high school and I used primarily O'Reilly's "Practical C". I thought it did a pretty good job, but I also used variety of other books like K&R. The most useful book for me besides Practical C was "C: A Reference Manual" by Samuel P. Harbison and Guy L. Steele, but as the title implies, it was not a book about learning C.
If you're talking about programming C++ and not straight C, I think a good book would be "How to Think Like a Computer Scientist". It's a free text (FDL) that has a versions written for Java, C++ and Python. I think it's a great text for beginning programmers because it teaches some of the fundamentals of computer science. Not a great text for college CS classes, but perfect for high school students or intro to programming classes. -
Re:On the cheap side ...
I've been using How to think like a computer scientist: Learning with Python. It's useful, but a bit terse. My programming skills are rather limited and rusty, so I got stuck halfway through the book. People who program for a living will find the book easy to digest, I expect.
-
What about a snake?
Have you considered python? It has an interactive shell, which will let the basic concepts of programming come through. Also, you could take the first parts of How to Think Like a Computer Scientist (freely available and modifiable) and adapt them to the age level. The first few lessons should be fine, although they might need expanded somewhat.
Alternately, perhaps something more graphic-oriented would be desirable. If it were still around and supported, I would suggest Apple's Hypercard program. It appears there are some clones out there also, although I have no idea how good they are. (The first alternative listed says it is popular with educators.)
Good luck. -
How to think like a Computer Scientist
I'd recommend going to
http://greenteapress.com/
and reading one of the "How to think like a Computer Scientist" free PDF books (and if you really love it, buy a dead tree copy)
Intro to real programming in Python, Java, or C++ with emphasis on WHAT you're doing, not HOW. Almost every language out there is just a rehash of a few basic concepts. Once you learn one, it's just a matter of learning new syntex and a few cool "Hey, this language makes it really easy to do X" things.
Don't concentrate on a language- concentrate on the concepts. -
Re:Welcome to 1982
If you have some prior programming experience the Python Tutorial included with Python is pretty good. There is also Dive Into Python and How to Think Like A Computer Scientist: Learning With Python available on the web and in print. In fact the Dive Into Python site has a whole list of freely available books about Python. For whatever reason Python seems to have attracted more than its share of Free documentation.
Once you understand the basic syntax the Python Library that is available with Python generally does a good job of covering the various parts of the built-in Python library. I refer to the Python Library all the time. The info version makes it easy to use as part of Emacs
:).One of the things that are you are likely to find about Python is that studying it away from the computer is likely to be less effective than learning at the computer. Python is highly dynamic, and it is often useful to type code snippets into the command interpreter to see what happens.
It's also important to note that you are aren't likely to rewrite the bubble sort in Python. Python's high level structures mean that someone else has already done this for you
:).Good luck.
-
A few good and free Python booksOn the python.org site you can find a big list of Python books.
I suggest:
- How to Think Like a Computer Scientist: Learning with Python, introductory, available both in electronic form (for free) and printed;
- Thinking in Python, advanced, available only in electronic form (for free);
- Python Cookbook, Second Edition, advanced, available only in printed form, but it's a really good book.
Good reading.
-
CS Departments shouldn't use proprietary languages
I never understood why CS departments started switching to Java. It's a proprietary language, a behemoth library, uses confusing concepts even in early programs (such as the Hello World program requiring a class declaration), and has a compiler/VM to which you have no source code access! (True, nowadays you have gcj to look at, but that's by no means the reference implementation.)
CS departments, I think, should be using Python for instruction. Not only is Python an easier language to learn, but it's more intuitive and more closely resembles pseudocode you see written for theoretical computer science. For example, in a theory of computation book, you may find a definition of a Turing Machine as a 6-tuple. Well, Python has tuples, so you can just say
# turing machine M is a 6-tuple
M = (Q, T, s, b, F, f)
If you need to pass to a function (the encoding for M), it's easy to do so: just pass M. etc.
Python also supports other concepts common in pseudocode, like "for i in x" syntax, and associative arrays being a built-in type really helps with dynamic programming problems. Etc.
Python has an interactive shell where students can try out code to play with the language, a very helpful learning tool. It also has a high degree of transparency and allows introspection, so students can see how something like an object system actually works.
Also important, the main Python implementation (CPython) is open source, and the development of the language is done in a community-oriented fashion.
Finally, Python has two extremely high quality books written about it, which are also 100% free. One is called "How to Think Like a Computer Scientist: Learning with Python" and is found here, and the other is called "Dive Into Python" for experienced programmers, and is found here.
I'm not saying that Python is the ultimate language, but I think everyone has to agree that it's a better choice than Java for programming courses in universities. I know my data structures/Java course was 90% about "how Java works" and 10% about "how to solve programming problems." In a Python course, I think that ratio would be inverted. -
Python has a free book and pygamePython is definitely the way to go. There is a free book that is written especially for High School CS classes, it's called How to Think Like a Computer Scientist: Learning with Python. You can get it here: http://greenteapress.com/thinkpython/ for free in any of these electronic formats: PDF, LaTeX, Postscript, and HTML. Or you can buy printed copies here: http://greenteapress.com/thinkpython/terms.html
In addition to that there is pygame. A set of Python modules designed for writing games. It's really simple and easy to use. I think even beginner programmers wouldn't have much trouble making simple games. I wrote a breakout clone that's only 147 lines, I was going to use it to teach a programming class too. There is nothing complicated in it at all, just a few loops, if statements, some rectangle geometry and negating numbers. Elementary, really.
I think Python fits the requirement, more so than any other, for a language "that might be more 'enticing' as well."
-
Python has a free book and pygamePython is definitely the way to go. There is a free book that is written especially for High School CS classes, it's called How to Think Like a Computer Scientist: Learning with Python. You can get it here: http://greenteapress.com/thinkpython/ for free in any of these electronic formats: PDF, LaTeX, Postscript, and HTML. Or you can buy printed copies here: http://greenteapress.com/thinkpython/terms.html
In addition to that there is pygame. A set of Python modules designed for writing games. It's really simple and easy to use. I think even beginner programmers wouldn't have much trouble making simple games. I wrote a breakout clone that's only 147 lines, I was going to use it to teach a programming class too. There is nothing complicated in it at all, just a few loops, if statements, some rectangle geometry and negating numbers. Elementary, really.
I think Python fits the requirement, more so than any other, for a language "that might be more 'enticing' as well."
-
Re:What do they teach in undergrad now?
I tried learning Python as my first language because Eric Raymond recommended it to newbies, and it didn't work out so well for me.
I'm sorry to hear that. It's true that some of the Python books out there are deficient. This book is good for teaching programming, but it's only been available for a couple years.
TTFN -
Try Python
I highly recommend "How to Think Like a Computer Scientist: Learning with Python." It's a great introduction to programming using a language that doesn't get in the way. Python is also a great language for starting procedurally and "graduating" to OO. Besides being a great book, it's available for free in LaTeX, PDF, PostScript, and HTML. Needless to say, both the language and the book are available "using any web browser." As for JavaScript, I have tried to keep it at arm's length for as long as possible.
-
Open Source Publishing
I used to teach at the local community college for a while. I recommended that they switch to python from qbasic. They said ok, so what about the text. I showed them http://greenteapress.com/thinkpython/. Well, they bit and they are using it. The text is $17.00 hardcopy or free on the web. $17.00 is very reasonable.
-
Free Python Books
Actually, if anyone is interested in learning Python and doesn't mind reading a book on their computer, there's a bunch of free ebooks available on the Python Documentation page (as well as a comprehensive list of books that are only printed). I've read a few of them, most of them are pretty good, in particular "How to think like a Computer Scientist" is a very good text for a less experienced programmer and Bruce Eckel's "Thinking in Python" is a nicely comprehensive coverage of Python (not unlike his "Thinking in Java" and "Thinking in C++" books).
Even if you do mind reading books on your computer screen, most of these books (actually I think all of them) are also available as physical printed books as well.
Thinking In Python by Bruce Eckel
An Introduction to Python by Guido van Rossum, and Fred L. Drake, Jr. (Editor)
How To Think Like a Computer Scientist: Learning with Python by Allen Downey, Jeff Elkner and Chris Meyers
Dive Into Python: Python for Experienced Programmers by Mark Pilgrim
Text Processing In Python by David Mertz
Python Language Reference Manual by Guido van Rossum -
Re:Another...
yeah, this is a good book. also it's released under the GNU Free Documentation License and is available to download in various formats here.
-
Re:What I want to see...I've had some success with textbooks published under something like the model you're talking about. They're college-level books, but it turns out I sell more to high schools than to colleges. They're free-as-in-beer, and some are also open-source and copylefted. I sell them in print for about what it would cost to laser-print your own copy.
See my sig for more examples from other authors and in other fields. Green Tea Press sells open-source CS books, and I think some of their sales are to high schools.
-
How about "How to Think like a Computer Scientist"
Get your library to support a Free book! Check it out at http://greenteapress.com/thinkpython.html.
I'm told that this is being used as a HS CS text somewhere, so it seems apropriate.
-Peter -
Re:Printed copy wanted
I think you missed the following sentence from their web page:
You can order the book from Barnes and Noble or Amazon.
They give you links and everything. You should also realize that they're in the textbook publishing business, so nearly all their sales are probably going to be wholesale. -
How to Think Like a Computer ScientistCheck out How to Think Like a Computer Scientist. It's an excellent introductory book, and the digital version is also free. It does at least some of the kind of stuff you're talking about.
However, I think it would be a mistake not to teach any syntax at the beginning. Students need concrete examples, and the only thing that makes it fun to learn how to program is that you get to build actual programs that really do things.
-
How to think...If you're looking for the "How to Think Like a Computer Scientist" books, I found them here via a google search. They're available in a few formats, including PDF. What's notably missing, though, is the C++ version of the book that's mentioned in the review. Just the Python and Java versions are there.