I really like these principles. I know that they’re focused on Advanced Placement Computer Science (this is the American notion of allowing some students to take college level courses in high school). But I think they have broader relevance, (and the content behind each of these principles could distinguish what they are used to teach). What I like is that they are organized around principles that cross-cut a set of disciplinary silos Computer Science has gotten too used too. They say nothing about HCI, Systems, (a little about) Networking, perse, but require skills in all these areas. Perhaps this is just where I work, but we seem to siloed, and to mired in discussions about what fields matter the most to Computer Science. I think these present a constructive way of moving forward, by placing an emphasis on why any of these areas matter, and blending theory with practice.
Computing is a creative human activity that engenders innovation and promotes exploration.
Of course, I’m going to like this, but I think it does a nice job of putting the human in the loop of systems production, while simultaneously also suggesting that it’s not just about building things for profit or to solve business problems. Innovation is an exploration of the new… that sounds a lot more exciting than going to work for a code shop. And it also reflects an interesting reality for Software Engineering. The hard work in Software Engineering is building the solution the first time, once built (as long as it’s not changed) it’s a matter of copying it. All the work is in the first effort, and believe me it’s a lot of problem solving exploration. I know I used to work with people who did this for a living.
Abstraction reduces information and detail to focus on concepts relevant to understanding and solving problems.
This seems to me to be a fundamental skill with computing. I think it can be read in different ways. Here are two. I read here the skills that are required during modular decomposition, to get the right solution parts from the problem statement. I also read another about turning piles of interview data, through the process of analysis, into a set of outcomes, perhaps implications for design. But, it’s always the same type of challenge, a winnowing of the data through established analytic principles and mechanisms to get to a focus on the core.
Data and information facilitate the creation of knowledge.
I think there’s a relationship between abstraction and data, abstraction is the process by which you manage the data here. Perhaps even part of the process of turning it into knowledge. But there are other ways to manage data and to generate knowledge that turn on other innovations. One that springs to my mind is data visualization. I think that’s a socio-computational system where people and machines work together to create meaning from data. This also connects Computer Science with Information Science in a really nice way. I think it’s still not quite clear, from a disciplinary stance, where the boundary of Computer Science and Information Science are here. Interestingly for Georgia Tech, it also connects Computer Science to Computational Science and Engineering.
Algorithms are tools for developing and expressing solutions to computational problems.
Recently we had a talk in which someone declared that the three most important areas of computing were algorithms, algorithms, and algorithms. Some of us think (hope) he was joking, especially when he added that people were just algorithms. But, needless to say, he’s not completely wrong, algorithms are central to a discipline of machine manipulation, since they are the mechanism of machine control. Nuff said.
Programming is a creative process that produces computational artifacts.
I’m all for creativity in programming. Frankly I think that Software Engineering has come lately to creativity, agile program seems to make room from creativity. But, earlier forms of software process management tended to over-emphasize control. I think that this was largely the product of two circumstances. First, the “software crisis” has long plagued the field. The software crisis is the difficulty of predicting how long, how expensive, and so forth any software project will be. Software Engineering has been in pursuit of better predictive methods to handle the software crisis. Second, Software Engineering was initially work done within the military context, the early big systems were military ones. And Military environments have a command and control form of management, so it was not totally surprising that that was the management style applied to software engineering. So, I think creativity is important. Now, a colleague of mine, has pointed out that programming can also lead to creative user experiences, which could be missed in the use of the word artifact, but the descriptions of what could be learnt seems to include that more. Perhaps add “and experience” onto the end of the sentence.
Digital devices, systems, and the networks that interconnect them enable and foster computational approaches to solving problems.
Networks are socio-computational systems. The technical network has given rise to applications that have enabled communication and coordination. Social media is perhaps the most recent and powerful example. That’s clear in the description. I suppose if I had a nit it would be that the human side doesn’t come out quite as strongly in the principle. I’m not sure that Facebook solves a problem perse, I think it allows us to be human to connect and communicate. And that doesn’t seem problem centered to me, it’s not business communication or whatever, rather it seems to be an essential human trait. Again I owe this to the same colleague, thanks Matthew. Perhaps I would have said, Digital devices, systems, and the networks that interconnect them enable and foster computational approaches to solving problems and support human experience. I notice that I’m just adding the word experience everywhere.
Computing enables innovation in other fields including science, social science, humanities, arts, medicine, engineering, and business.
So one possibility with what’s missing above, is addressed here. This is the area of socio-computational systems. Interestingly this principle is a hybrid. The principle focuses on fields, and that could be read as on the state of the knowledge. But in the text it’s also clear it’s on the state of the practice. Teasing the two apart could be useful. Computing is a platform for advances in other fields, my colleagues in Computational Science and Engineering are working on some of these advances for other fields of Science and Medicine. But, that’s different from changing the state of the practice, from changing business practice, from changing how we live, work and play. Computing is doing both. Although I hesitate to use the word change. I sometimes think that it’s more the case that it enables new ways to do what we always did. For example, web banking allows me to do banking from a far greater range of places and at times that physical banking would be impossible. But, I’m still using it to do banking. The institution of banking, of having checking (current) and savings accounts, of making transfers, of payments, and so forth is still pretty much the banking system I grew up with. Oddly enough I think Facebook might be more of a change agent. I would like to have kept up with people from my high school, but I couldn’t possibly do that with letters or even emails frankly. The heartbeat, the pulse of life that I get through the status updates I send and that I read, does allow me to learn a little bit about what the huge number of people I’ve interacted with over the years are doing today.