the Design Experience Weblog Archive

I found a post on Lambda, The Ultimate that links to a few articles discussing what should go into a first programming course, and how it should be taught. I originally looked at SICP and I think it teaches some really interesting fundamentals of how programs work. This critique by Felleisen, et al,[pdf] auhtor's of How to Design Programs advocates a different approach. The critique says that SICP shows how to do the main parts of programming, but does not teach when or why to choose a certain technique. It seems that SICP expects 1) the instructor to add this value, or 2) the student will learn this by applying the priciples to example programs, and be able to transfer this to their future programming projects.

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

Looking at Computer Curricula 2005 from the ACM there are several different types of degree in computer studies. I am focusing on concepts from Computer Science and Software Engineering (by their definitions.)

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 AreaCSSE
Programming Fundamentalsvery importantmost important
Algorithms and Complexity/td>most importantvery important
Programming Langaugesvery importantslightly important
Human Computer Interactionimportantvery important
Database Theoryvery important/td>very important
Database Practiceimportantimportant
Legal/Professional/Ethics/Societyvery importantvery important
Analysis of Technical Requirementsvery important/td>very important
Software Modeling and Analysisslightly importantmost important
Engineering Foundations and Economics for Softwarenot importantvery important
Software Designvery importantmost important
Software Verification and Validationslightly importantmost important
Software Evolution(maintenance)slightly importantvery important
Software Processslightly importantimportant
Software Qualityslightly importantvery 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

Here are some references toward the concepts I am interested in learning.

01:03 PM, 16 Dec 2005 by dave bauer Permalink | Comments (0)
categories: Learning , Programming , Computer Science

I have decided that even though I don't have time to formally pursue a degree in Computer Science, I am going to attempt to learn the content of a Computer science/Software Engineering program on my own.

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 5.2.0 has been released. This is a big release with many changes, mostly to the core data model to enable much easier handling of objects and tieing then into system-wide servies. It also incudes the tsearch2 driver for full text search with PostgreSQL. OpenACS 5.2.0 supports Oracle 8i and 9i and PostgreSQL 7.4 and 8.0.

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

I really like Michael Feathers' guidelines for writing unit tests. Reproduced in it's entirety here:
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

XML

Notifications

You may
request notification for the Design Experience Weblog.

Syndication Feed

XML