Beyond SICP, other options for the first course in CS [lambda-the-ultimate.org]
I have just started SICP and I agree with this critique. Probably most of all what I need to learn is when to apply a certain technique and how to anaylyze a program structure to know what techniques are being used and how to improve it.
Another critique of SICP is the specific domain knowledge required to understand the programs, especially mathematical concepts. One of the first examples, and exercises focuses on testing is a number is prime. The forumla and algorithm for this is introduced, but it seems it is assumed the reader understands this from prior math courses. This can make the learning frustrating as you end up focusing on understanding the math instead of the program.
It probably is important for a programmer to understand this math, but its hard to aquire it in this context. The critique shows a table of the concepts taught and the examples used to teach them comparing SICP to HTDP and its striking how the examples in SICP are of interest only to the most dedicated computer scientist who wishes to understand the deepest concepts of the art, where HTDP examples seem much more fun, and approachable.
I still will stick with SICP, but I am also going to look at HTDP in parallel. I am intersted in the funadmentals of programming langauges and how they are built, even if it isn't directly applicable to my programming work. I also am interested in learning about learning, and the different ways the programming fundamentals can be learned.
10:40 AM, 23 Dec 2005
by dave bauer
Permalink
| Comments (3)
categories:
Learning
,
Programming
,
Computer Science
,
Learning Portfolio
My understanding is that computer science is the theory of how computers are used to build things, while software engineering focuses on actually delivering working software to users.
The ACM paper has a couple of ways to describe the programs. Fist is "Knowledge Area"
I have interpreted their table to give an idea of what is included as a major topic in each area. See the paper for the full details.
| Knowledge Area | CS | SE |
| Programming Fundamentals | very important | most important |
| Algorithms and Complexity/td> | most important | very important |
| Programming Langauges | very important | slightly important |
| Human Computer Interaction | important | very important |
| Database Theory | very important/td> | very important |
| Database Practice | important | important | Legal/Professional/Ethics/Society | very important | very important |
| Analysis of Technical Requirements | very important/td> | very important |
| Software Modeling and Analysis | slightly important | most important |
| Engineering Foundations and Economics for Software | not important | very important | Software Design | very important | most important |
| Software Verification and Validation | slightly important | most important |
| Software Evolution(maintenance) | slightly important | very important |
| Software Process | slightly important | important |
| Software Quality | slightly important | very important |
That covers most of the major areas. I'll be thinking about how these concepts tie into what I have learned and what I can learn building software.
01:08 PM, 16 Dec 2005
by dave bauer
Permalink
| Comments (0)
categories:
Learning
,
Programming
,
Music
01:03 PM, 16 Dec 2005
by dave bauer
Permalink
| Comments (0)
categories:
Learning
,
Programming
,
Computer Science
I am using this weblog category to document this process in case I ever decide to take what I have learned and apply it toward a degree. There are schools like Empire State College that grant credit for documented learning. Documenting the learning process should also help me reflect and learn what I have learned.
I feel that I have quite a bit of computer science type knowledge already through my open source volunteer programming, and consulting projects. The idea is to figure out what parts I have learned and where I can learn more.
12:59 PM, 16 Dec 2005
by dave bauer
Permalink
| Comments (0)
categories:
Learning
,
Programming
,
Computer Science
,
Learning Portfolio
OpenACS 5.2.0 Released [openacs.org]
OpenACS is a community focused web application toolkit. It's main focus is developing collaborative web applications. OpenACS provides a wide variety of collaboration tools including discussion forums, weblogs, news, file sharing, photo albums, faq builder, web based presentations, surveys, and more.
10:03 PM, 15 Dec 2005
by dave bauer
Permalink
| Comments (0)
categories:
OpenACS
,
Open Source Content Management
Guidelines for writing unit tests [groups.yahoo.com]
I've used these rules with a large number of teams. They encourage good
design and rapid feedback and they seem to help teams avoid a lot of
trouble.---
A test is not a unit test if:1) It talks to the database
2) It communicates across the network
3) It touches the file system
4) It can't run correctly at the same time as any of your other unit tests
5) You have to do special things to your environment (such as editing
config files) to run it.Tests that do things things aren't bad. Often they are worth writing,
and they can be written in a unit test harness. However, it is
important to be able to separate them from true unit tests so that we
can keep a set of tests that we can run fast whenever we make our changes.
Michael Feathers
www.objectmentor.com
I think these rules are great and really help you think about what level you are testing at. I am having trouble imagining how to write tests for OpenACS code. Most of my tests handle OpenACS objects where are always stored in a database without any Tcl level persistance. I will have to think about how interfaces to procedures in OpenACS can be tested in isolation from the database.
Credit to James Shore for the reference to these guidelines. His weblog is full of great down-to-earth advice on test driven development, extreme programming, and agile processes. Real examples that help you understand what these concepts mean in practice. I will be returning to think about more of this writings soon.
02:37 PM, 01 Dec 2005
by dave bauer
Permalink
| Comments (2)
categories:
OpenACS
,
Open Source
,
Programming
| December 2005 | ||||||
| S | M | T | W | T | F | S |
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |