Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

This intro is only my naive attempt at a mile-high snapshot helping me to position my question. Any user trying to answer my question, that tries to nail down one aspect of programming, will have to overcome my naive understanding, simply because of my idiosyncratic education. So here I'm placing my subject in the array of topics outlining programming and software activities:

  1. Fundamentals of programming (software design patterns, idioms, models)
  2. Code reuse and integration (libraries, frameworks, apis)
  3. Continual development (documentation, commenting, version control)
  4. Maintenance best practices (systems administration)

I'm interested to focus my programming skills on code reuse and integration topics. This topic may certainly begin with software programming languages and the differences between functional and object-oriented programming. However, what I wish to focus on in detail and at some length are the variety of uses of libraries, frameworks, and apis.

My programming education comes from what I can readily find on the internet and in books. Earlier this year I enrolled in a class on fundamentals at Coursera, Programming Languages, by professor Daniel Grossman, which attempts to prepare students for programming in any language. Reuse was mentioned only as a property of functions and object. You can start your search for 'reuse and integration' in fundamentals and not get close.

Since I started learning some Ruby, php I've put together a better understanding of 'reuse and integration', but its all cobbled and patchwork. Published materials are mostly #1 and then some idiosyncratic mix of #2-4. You can read a lot of books and still not understand how all of these abstractions fit together.

I've even participated in a discussion here at p.se on the pedagogical problem of cargo-cult programmer students who "...copy-paste code from previous, similar-looking assignments..." While my own answer to this reflects my appreciation for the OP's concern, and yet my imagination can't help envying these students who can draw with such ease from previous projects just a little bit.

I've not read the book or participated in a class or heard a discussion which attempts to survey the reuse and integration paradigms in their totality.

Where in computer science education does “reuse and integration” find comprehensive coverage?

share|improve this question
    
what is your question? –  gnat Oct 10 '13 at 17:02
1  
@gnat: it's in the title. –  Robert Harvey Oct 10 '13 at 17:02
    
Facetious answer - In theory, not in practice. –  mattnz Oct 10 '13 at 19:59

2 Answers 2

I think you're confusing computer science with software engineering. Computer science is more concerned with theories, algorithms, data structures and proofs. Software engineering is the discipline that studies software architecture and construction. A computer science degree program may have software engineering courses, but they're not necessarily part of computer science per se.

share|improve this answer
4  
Ah, I see. The whole "astronomers don't use telescopes" thing. –  Robert Harvey Oct 10 '13 at 18:48
3  
+1000 if I could, just for "confusing CS with software engineering". This must be one of the Top 10 misconceptions here at programmers.se. –  Andres F. Oct 10 '13 at 18:49
1  
@AndresF. This discussion would make a good entry for the Programmers blog. –  Robert Harvey Oct 10 '13 at 19:15
1  
@RobertHarvey: I was pointing out that OP would do better to look for software engineering courses than computer science ones, since software engineering tends to focus more on system architecture and software design (including issues of design for reuse and interfaces as contracts). –  TMN Oct 10 '13 at 19:15
1  
@RobertHarvey: Like I said, survey the software engineering courses. Unfortunately, it appears that Coursera is not very rigorous with their classification system (at least, I wouldn't put Sedgewick's Algorithms in the same category as An Introduction to Programming for Musicians and Digital Artists, but maybe that's just me). I didn't really see anything appropriate to OP's question in their catalog, –  TMN Oct 10 '13 at 19:29

What you described as "reuse and integration" is mostly embodied in a practical way using the concept of modularity.

Modularity takes a number of forms. In some languages there are actually modules, and in many others there are concepts of modularity that take the form of individual files, namespaces and other similar organizational mechanisms. Object-oriented classes are a form of modularity, as are simple functions.

To achieve reusability and ease of integration with various systems, software must be generic enough to be applicable to a wide variety of programmer scenarios. This is achieved by high cohesion and loose coupling. Generics allow collections to be used with arbitrary objects.

In short, reuse and integration are achieved by understanding fundamental programming principles, and how these concepts can be applied to develop software that is easily reused and integrated. You have to know the fundamentals first, in other words.

share|improve this answer
    
Drat. My copy 'n paste dreams are only that? Thank you for your answer. Of course the short of it is keep going on the fundamentals track, but I think the reality is more complex. I see this from concurrent study and use of frameworks built on top of programming languages. I hate to out myself for fear of alienating purists, but Drupal is very usable and customizable with novice knowledge, but a maze of interdependencies –  xtian Oct 10 '13 at 17:43
    
Programming always involves tradeoffs like this. Like any other form of fine art, the experts make it look simple, but in reality a lot is going on under the hood to maintain that illusion of simplicity. Copy/pasting does have its merits, but eventually you need to refactor instead. Otherwise, as you probably already expect, you will eventually be left with an unmaintainable mess. –  Robert Harvey Oct 10 '13 at 17:47
    
True. And this was largely the reason for my 'snap shot'. The facts are I continually ask some version of this question annually, while I continue my programming education. There exists some point where I will have attained the necessary formal training to understand what does seem like a simple and oft repeated concept, reuse is itself a fundamental of programming. –  xtian Oct 10 '13 at 18:03
2  
Reuse is indeed an aspiration, but it's not a fundamental. Encapsulation is a fundamental; it supports reuse, but it's not sufficient, in and of itself. –  Robert Harvey Oct 10 '13 at 19:08
    
+1 for that clarification... –  xtian Oct 10 '13 at 21:02

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.