23

We've all heard it; whenever there's a discussion about CS grads having poor development skills someone eventually says,

Computer science isn't software engineering.

The problem that I see is that programming and software development are taught in CS courses. They're just commonly taught poorly. If it's being taught, then why not teach it right the first time? *

So I would like to see what the opinions are on 2 questions:

  1. Is the CS != SE argument a copout or excuse for not properly teaching programming skills.

  2. Regardless of your answer to question 1; if you were in the almighty position of making such a decision: would you force an emphasis on proper teaching of programming in CS courses?

*. I have a suspicion, based on anecdotal evidence I obtained throughout my education, that most academics in the field haven't had to write code to be maintained and haven't maintained code, and as a result don't have the knowledge/skills to teach it effectively.

Ixrec
  • 27,621
  • 15
  • 80
  • 87
Steven Evers
  • 28,200
  • 10
  • 75
  • 159
  • Before I can answer, I'd need a clarification on what you're referring to. Can you provide an example of what the CS grad was doing that you think was subpar work? – Jeremiah Nunn Oct 13 '10 at 15:38
  • 7
    I'll clarify my comment; in my mind, they are different (CS != SE). So if I replace CS and SE with 2 other fields A, B, where A != B, you could get something like Bowling Lessons != Japanese History. Then you're argument becomes: is the BL != JH an excuse for not properly teaching JH? This is now an absurd question, and should be dismissed. If you saw a CS grad that didn't know why you'd use a hashtable over a linked list, he was taught poorly. If you saw a CS grad that did a poor job refactoring code, that can be excused. – Jeremiah Nunn Oct 13 '10 at 15:47
  • 2
    @Jeremiag Nunn: To use your analogy: Japanese history isn't taught in tandem with bowling. I'm making the argument that _every_ CS programme, does in fact teach programming and that they use the "CS != SE" argument to excuse themselves from teaching it well. – Steven Evers Oct 13 '10 at 16:01
  • 2
    Another thought: is the lack of SE skills in a particular CS grad the fault of the school or the student? In each class you'd likely have a pretty wide skill spread from competent to horrible. – Adam Lear Oct 13 '10 at 16:25
  • 2
    @SnOrfus Software engineering is the craft of building software. Computer science is the theory behind the software. Knowing both is ideal, but they are still separate. A better analogy (IMO) than @Jeremiah's would be one of building instruments vs. playing them. – dash-tom-bang Oct 13 '10 at 16:34
  • 5
    The footnote about academics not having to write maintainable code is almost exactly the point. That's not what CS cares about. – dash-tom-bang Oct 13 '10 at 16:35
  • @dash-tom-bang: Is it just fortunate for mathematicians then that their faculty encourages (nay, forces) them to learn to produce elegant and readable proofs while showing the work? – Steven Evers Oct 13 '10 at 17:21
  • @SnOrfus: CS academics (to my knowledge) don't produce algorithm implementations. They produce algorithms. – Adam Lear Oct 13 '10 at 17:25
  • "Computer science", "software engineering", and "software development" are still going through a period of confusion—remember how relatively new they are compared to "true" engineering fields. Compare the divide between compsci/software-engineer to physics/architect. –  Oct 13 '10 at 17:34
  • I'd like to reiterate @Anna's point, I believe that's the source of confusion for many. CS academics are producing proofs just as much as math academics. And, yes, those proofs are required to be elegant and readable. No, they don't have to have good code (or any code at all) associated with those proofs. – Jeremiah Nunn Oct 13 '10 at 17:57
  • By "taught poorly" do you mean that CS students are being taught genuinely poor practices that lead to them writing objectively poor code? Or merely that they are not being taught engineering techniques such as unit testing, refactoring, etc.? – Carson63000 Oct 13 '10 at 23:38
  • @Carson63000: Both apply, but I'm focusing more on the former. I have seen CS grads who literally don't know some very basic programming principles (control flow, up/downsides to certain design patterns - things like that). – Steven Evers Oct 14 '10 at 17:15
  • @SnOrfus - gotcha. Happy to say, I think my CS degree did a pretty decent job of teaching programming on the side, but that was more than 15 years ago. Certainly we didn't cover any real software *engineering*, but it's probably correct that we didn't, since we were supposed to be studying CS. – Carson63000 Oct 14 '10 at 21:55
  • Why is the question limited to CS? I don't think it's possible to get a maths degree now without writing code either. – Peter Taylor Jan 19 '11 at 22:08
  • @Peter Taylor: Because this is P.SE. The question could apply to math as well, but that's not the focus of the site. – Steven Evers Jan 19 '11 at 22:24
  • @SnOrfus, I don't see your point. This is programming SE, not CS SE. – Peter Taylor Jan 19 '11 at 22:53
  • @Peter Taylor: Sorry; My point was that I agree with you, but the question is limited to CS solely because of the audience. – Steven Evers Jan 20 '11 at 02:41

17 Answers17

27

I don't think it's a copout, but rather an assertion that computer science isn't software engineering, it isn't programming -- it's, well, the science of formalized computation. In essence, it's math (in fact, many CS programs started off as applied mathematics programs).

I think the problem lies more with industry than academia. Industry sees a CS degree listed on a résumé and thinks, "Great, this guy's good with computers," and hires him to do anything related to a computer: IT, programming, software development, whatever. Those things don't necessarily lie in the realm of expertise of a CS graduate. In turn, a lot of people who like building computers or playing videogames enter a CS program expecting to do that kind of stuff, and get a rude surprise; i.e., a lot of students going into CS don't really belong there, and would be better off in a more targeted degree program.

Secondly, there's a very limited time to teach CS -- a very broad subject -- in a typical undergraduate curriculum. My undergrad curriculum had 8 CS courses (for a BA) or 12 CS courses (for a BS), plus all the required math courses. That's not a lot of time to teach CS and math and programming and software engineering, so at some point you have to decide what's important, and what a student can pick up on their own.

That last point is crucial: I think a good student -- in any subject area -- will explore ideas on their own. I have a CS degree, but I think I came out of college as a decent developer, because I studied and wrote software on my own. College isn't all about classes; it's also about giving students time to develop their skills semi-autonomously, while still giving valuable guidance.

I maintain that teaching theory -- CS, math, etc. -- is just as important, if not more important, than teaching specific job-related skills. If you teach a student the why behind methods and techniques, and not just the what, you'll end up with someone who is much more adaptable when applying his knowledge. For example, I went to a much-maligned "Java school" and thus was taught in Java, but I also had courses in programming language theory, which explained the why behind many languages; as a result, I've learned to write much better software than if I didn't have that background. Sure, I don't write software in Haskell in my day job, but knowing a lot of programming language theory has allowed me to gain insight that has been applicable to my job as a programmer.

I also think industry is expecting too much from college students. Industry wants to cut its own costs, so instead of training new recruits for their jobs, they expect colleges to become trade/technical schools; in effect, they want colleges to do their training for them. College graduates can't be expected to know everything fresh out of college. Being a good developer is as much about experience as it is about knowledge (especially in a relatively young field like software development).

mipadi
  • 7,493
  • 36
  • 35
  • This is exactly my thought, but explained much better than my answer. – Jeremiah Nunn Oct 13 '10 at 16:13
  • +1: So much good stuff here, I'd hate to pick at 1 thing, but considering that CS originated as applied mathematics, doesn't that imply the importance of its application - in this case, programming? – Steven Evers Oct 13 '10 at 16:40
  • 2
    @SnOrfus: To the extent that programming is applied mathematics, yes. But just as computer science != software engineering, programming != software engineering, either. – mipadi Oct 13 '10 at 16:45
  • I don't think that my university was very highly regarded, but I am glad that I got exposure to a wide range of programming languages. The modern focus on a single language means that you don't get exposure to the concepts that come with trying to write software that does something in Prolog or Lisp. – dash-tom-bang Oct 13 '10 at 18:52
  • @dash-tom-bang: I agree, in fact the engineering school I went to proposed a course called "Exotic Languages" where we would see old languages (Fortran, Pascal), functional languages (Scheme, Lisp, Camel), etc... there was something like 15 courses and 14 languages. Of course we only had an overview, but it was interesting to explore the various paradigms, the features, the evolution of languages. – Matthieu M. Oct 13 '10 at 20:17
  • @SnOrfus: Yes, and electronics is applied physics. Should it be necessary to learn to use a soldering iron and an oscilloscope to get a physics degree? Since the same is true of mechanical engineering, how about metalworking tools? You have to stop somewhere. – David Thornley Oct 13 '10 at 20:35
  • 1
    @David Thornley: Firstly, myself and everyone I ever know who took physics used an oscilliscope when studying waves. Still though, the analogy doesn't hold. Students are **_already being taught_** programming as part of a CS degree. You were, I was, all of us that attended a unveristy were. It wasn't even a one-off section of one course. It's an integral part of at _least_ 1-2 classes per semester. – Steven Evers Oct 13 '10 at 21:36
  • 2
    +1 for explaining that school (college, university, whatever) should teach you how to fish and not just give you the fish – Emiliano Oct 14 '10 at 10:16
  • @Snorfus: But again, those classes aren't teaching Software engineering. They are teaching some CS topic, and maybe the assignments require programming. The professor probably isn't concerned that I used bad variable/method names or didn't handle exceptions. She's looking for proper use of the concept that was just taught, or accomplishing of a particular goal. We should get back to my original comment on your question: what examples of bad programming are you seeing? Otherwise, this is very strawman-ish. – Jeremiah Nunn Oct 14 '10 at 15:51
  • "Computer Science is no more about computers than astronomy is about telescopes" Edsger W. Dijkstra – boos Jan 20 '11 at 16:26
  • "I studied and wrote software on my own" - Me too, it may be required to some extent and it may be fair to require that. But no need to be snotty about it. – alan2here Nov 24 '12 at 21:33
  • @alan2here: I'm not being snotty, just pointing out that in college, it's important for students to spend time learning on their own (not just in classes). Students aren't going to get such a block of time (and the easy access to resources to do so) at other times in life. – mipadi Nov 24 '12 at 22:13
25

Part of the problem here is the fact that 4 years is not enough time to become a polished software engineer. Given that we want the undergrad to have exposure to more things than just math and CS courses and the fact that there is plenty of pure mechanics to learn (algorithms, data structures, language syntax), we can not expect a green CS major to be a software engineer.

I would agree that CS != SE and I'm not sure you can just go to school and become a SE (even with a Masters)

bigtang
  • 2,037
  • 1
  • 17
  • 15
  • +!1: I see your point, but it's not just 'polished'. Many lack some very basic skills. – Steven Evers Oct 13 '10 at 16:03
  • I guess it depends upon what you consider very basic skills. For example, SQL is a basic skill in my mind but I have found my CS grads are actually pretty weak in it and I think that is to be expected. If you are saying they are weak in language syntax or basic modularity or OOP concepts then that's a big problem and I'd start looking for grads out of different schools – bigtang Oct 13 '10 at 17:04
  • I've been programming professionally for 14 years. I've looked at SQL and can even author basic queries, but even these basic skills only arrived in the last year. SQL is not CS. SQL is an implementation of database theory, which is CS. – dash-tom-bang Oct 13 '10 at 18:45
  • @dash-tom-bang: Would you consider control flow statements in imperative languages to be basics? I can confirm that there exist degree toting fresh CS grads that don't know the majority of them. – Steven Evers Oct 13 '10 at 21:39
  • I would not consider the implementation of flow control in any particular language to be among "the basics of Computer Science." However if someone does not understand flow control *as a concept* then they have not learned CS. – dash-tom-bang Oct 13 '10 at 23:53
  • Sorry but I have to completely disagree with the first part, while completely agreeing with the second part. 4 years is plenty! The problem, as you said it, is school. It doesn't provide the right problem sets to train SE sufficiently. – Nicole Jan 19 '11 at 18:57
  • I really in disagree with this answer. Learning to code isn't the main field of a CS and a SE can dont have the same accademic preparation to solve complex problem. i suggest to you to read http://en.wikipedia.org/wiki/Computer_scientist and http://en.wikipedia.org/wiki/Software_engineering, as you read, from the first line of every article at you become clear what is the difference. – boos Jan 19 '11 at 19:41
10

CS is in fact not SE. And people seem to conflate the two all the time, even while admitting it. Computer science should really be renamed something like Computology, or the science of computing. In fact, computer science has very little to do with computers. It's graph theory, algorithm analysis, data structures, etc.

People want to assume a fresh CS grad is actually an ITT grad; they want someone who has been trained in a vocation. Computer science is science, programming is an art. These are not the same.

This is like asking why a fresh Physics grad isn't a good car engineer. It's silly.

Jeremiah Nunn
  • 341
  • 1
  • 4
  • 2
    Programming is a craft, not an art. – dash-tom-bang Oct 13 '10 at 20:22
  • 6
    Programming is craft, engeneering *and* art. – Maciej Piechotka Oct 13 '10 at 23:14
  • +1 for renaming, but I would go for Informatics, so that we get away from computers totally and so probably won't get the looks of horror from other students when you say you are doing CompSci. – Callum Rogers Oct 16 '10 at 01:49
  • 2
    I would not rename it. What is Computer Science, but the science of computers? in other words, the study of calculating machines, which implies the study of calculating. – Michael K Nov 12 '10 at 18:56
  • 1
    Should be renamed because people made confusion on it as you. do you know Edsger W. Dijastra ? he once said, "computer science is no more about computers than astronomy is about telescopes." :) – boos Jan 19 '11 at 19:52
  • 1
    Art creates beauty; craft creates utility. Art is created for its beauty; craft is created for its utility. Art might be useful; craft might be beautiful. Software Engineering creates utility; therefore, Software Engineering is a craft. – Geoffrey Jan 20 '11 at 15:52
  • I'd say the name Computing Science is much more accurate. – Marcel Valdez Orozco Oct 28 '12 at 21:48
8
  1. At least in the United States, education as a whole has become about profit. Schools are dumbing down curriculum across the board to increase enrollment. There are more people in college that don't belong there than ever. Learning proper techniques is not something you can teach easily so they don't.
  2. Personally I would put more emphasis on SE than there typically is but I believe CS as a program is less appropriate for people looking to get into industry. I think more institutions should offer a practical SE program.
ChaosPandion
  • 6,305
  • 2
  • 33
  • 33
  • +1 for #1. I noticed this when I went to school. It was a for-profit school and I felt that many of the students were not qualified to be there. In addition, the school only got money per course and failing a student meant they didn't get anymore money from them, so quite often teachers went out of their way to pass students. We had at least one person graduate with their degree who I don't think could even write a Hello World program in their choice of language! – Rachel Oct 13 '10 at 16:11
  • since you touched on US Education system and the role of profit, here is an obligatory Milton Friedman Choir: http://www.youtube.com/watch?v=W3Seg0JE1PM – Job Jan 19 '11 at 20:37
7

Is the CS != SE argument a copout or excuse for not properly teaching programming skills.

No. CS is not SE. That's a fact, not an excuse.

Regardless of your answer to question 1; if you were in the almighty position of making such a decision: would you force an emphasis on proper teaching of programming in CS courses?

No. It would be like forcing astronomers to learn the details of building telescopes. Or forcing programmers to learn the details of building computers. Related stuff, but one man doesn't need to know everything.

Joonas Pulakka
  • 23,534
  • 9
  • 64
  • 93
6

Yes, this sounds like a cop-out to me, and a sign of CS's immaturity as an academic discipline.

An American Chemical Society accredited B.S. program requires you to have passed specific courses to demonstrate particular proficiencies in both theory (lecture classes) and practice (lab classes). At present, CS has nothing like that as far as I know.

One of my grad schol profs was a very ivory-tower theoretician whose office was never sullied with anything more physically chemical than a fishbowl with Magic Rocks, but when I was his TA for freshman chem, he also proved to be a quite competent bench chemist.

When I worked as an industrial paint chemist, they'd have laughed their heads off at the notion that I'd have a bachelor's and be incompetent in the lab. Of course the details of what I was doing in the lab were different than what I'd had in lab classes in school, but the principles were the same - we just used a paint mixer and a can, rather than a beaker and magnetic stirrer.

If one were to apply the same approach to CS, the details of what one might teach as practical software development skills for a CS/SE curriculum might vary from school to school, and over time. But it just sounds crazy to me that it's acceptable that somebody could get a degree in the field and not be competent at writing, debugging, and maintaining some kind of code. (Of course, that's how things actually are in many CS programs, but it's still crazy.)

Bob Murphy
  • 16,028
  • 3
  • 51
  • 77
5

I agree that 4 years is only enough time to give them a good foundation on which to grow. However, I think one thing that really helps is when people from the industry get involved in developing the curriculum and even teaching in the classroom. Last year I was an Industry Fellow in a Software Development class at a local university. It was a very eye-opening experience for me. The professor and I worked together on the course content and we put a lot more information about the development process, industry best practices, and "real-world" situations then they had been doing before. What we discovered was that, because most of the instructors do not develop widely used and maintained code, bringing in someone from industry helped to identify and teach the skills needed to do that. The professor did all the grading and provided the teaching expertise that I lacked.

Beth Lang
  • 1,377
  • 1
  • 9
  • 16
3
  1. Yes it is a copout 100%, they should be teaching long term skills which will be useful throughout our career. Whether or not your intention is to go into academia or the industry you will need to be able to program in a way that can be maintained, even if it's only by yourself.

  2. Yes, although it would only be stressed in the proper courses. Personally, if I have to talk to you to better understand how you tried to implement an algorithm I would mark down your grade.

Even if you go pure CS research you will probably have to create code to demonstrate your ideas. Proper programming skills will be useful to you at some point so why not begin in college.

harrjs
  • 189
  • 8
  • The long term skills are the CS. "Java" is not a long term skill, nor are .NET, SQL, Pascal, or COBOL. Unless by "long term" you mean "be happy that you have a job when they need someone to maintain those legacy systems". – dash-tom-bang Oct 13 '10 at 20:24
  • While I agree that the base skills (CS) are needed, I mean writing code that is maintainable and easy to read regardless of the programming language it is written in. So long term meaning skills that go beyond technologies being used. – harrjs Oct 18 '10 at 03:38
  • 1
    IMHO CS is needed to be able to approach more complex problem, a lot of people around here, dont need a CS degree to write code, but if you need to handle a matrix 10x10 Million of data, and manipulate it, i cant figure how a SE can handle it without a CS degree. – boos Jan 19 '11 at 19:47
3

I think our problem is that we're much more like doctors than we're willing to admit... We have this idea that a four-year degree should prepare students to write software. It's not even close.

Our profession is largely in its infancy compared to other disciplines. Maybe the question should be: how can we improve CS so that the students who graduate with that degree are better suited to become productive members of a real-world software development team in a much shorter time span?

Maybe we should be more like medicine. Four years of basic work (CS degree) and then residency - practice of the craft under the supervision of a more experienced software engineer. Maybe that's what we already have, but it's less formal... I mean, like a resident, we learn our most valuable skills at the workplace in our first jobs.

Maybe as as discipline we just need to formalize this better.

Chris Holmes
  • 2,244
  • 14
  • 14
  • Or a Master Craftsman / Apprentice program – Austin Salonen Oct 13 '10 at 18:50
  • 1
    The M.D. program is not a science program. You want to study the science, you take biology. If you have a medical problem, though, you don't take it to a biologist. – David Thornley Oct 13 '10 at 20:40
  • This is a very good idea: formalizing the fact that Software Engineering is also a matter of experience. The same applies for lawyers and doctors – Emiliano Oct 14 '10 at 10:19
  • But what are we talking about David? How many of us graduate with a degree in CS and then actually spend our careers doing "Computer Science"? What most of us really do is go out into the world and practice the craft of Software Development. It's the same as an MD: they "practice" medicine. We practice application building. – Chris Holmes Oct 14 '10 at 14:24
  • @Chris Holmes: I'm really annoyed by the idea that a CSci degree is supposed to turn you into a programmer ready to hire into a job using the latest hot language. There's plenty of room for that sort of degree or certificate, probably much more than actual CSci. I do think that software development is analogous with practicing medicine here, but you don't get your MD from the biology or psychology departments, you get it from med school. It's a very respected degree, but it isn't a Ph.D. – David Thornley Oct 14 '10 at 15:13
  • I'm not in disagreement with you David. I think a CS degree is inadequate for creating programmers/developers who are "ready to hire into a job using the latest hot language." In fact, I think it's woefully inadequate. My point is that a CS degree is actually much more like pre-med degree and that creating quality software developer is a much longer practice, like residency. I think the problem isn't the CS degree itself, it's this idea that it is enough of a measurement of a person's ability to write software in the real world. We need a paradigm shift when it comes to the C.S. degree. – Chris Holmes Oct 14 '10 at 15:59
  • @David: @Chris: I think this analogy is a good one, though I don't think programmers need quite as much training as an MD :) MDs need to know how to analyze and diagnose a specific situation and then be able to arrange a spectrum of therapies with their pros and cons. Programmers seem to be coming out of school happy if they can find just one approach to a problem. – Mike Dunlavey Jan 19 '11 at 22:18
3

I have a CS degree, and for a whole year of my program there was no programming, only theory. We were told that we are not getting a degree in programming but in Computer Science. If you want to be a programmer go to community college.

We learned about algorithmns, design patterns, and alot of the theory about solving problems without a spacific language. Programming languages come and go, but the underlining theory stays the same.

So, to your first question, no I don't feel that CS != SE is a copout. It's a fact.

To your second question, no, I don't think I would. How do you properlty teach programming? Beyond loops, ifs, methods, classes and OOP, what would be 'proper programming' and how would you make it relevent to any programming language out there? You need experience writing code, something that a 4 year degree can't prepair you for.

One thing I would do though is provide a class on Development in the Real World. Source control, ticket/bug tracking, code tracing, and all that jazz would be a good start to prepare all the soon to be grads for what they will face in their new jobs.

I think it's on us when we hire a new grad to understand that they probably aren't going to be writing award winning code. They need guidance and direction.

HLGEM
  • 28,709
  • 4
  • 67
  • 116
Tyanna
  • 9,528
  • 1
  • 34
  • 54
  • ++ - excellent points. It would be nice if CS curriculums did offer a class or two on this "real world" stuff, I agree. We'd talked about it at my university (in 1993) but it never went anywhere. – dash-tom-bang Oct 13 '10 at 20:29
  • How were you expected to demonstrate your proficiency in the classes that made up the year of no programming only theory? Purely written exams? – Carson63000 Oct 13 '10 at 23:41
  • @Carson630000 - written assignments, some times writing state diagrams, sometimes writing out essays denoting how we would approach and solve a problem or how we would apply a various CS concepts. It forced us to understand the theory and not a specific programming language. – Tyanna Dec 21 '10 at 16:08
2

It is important for the university to strike a good balance between theoretic knowledge and practical skills. While attending different courses I learned both. During first years there was a lot of math and algorithms/data structures. What followed was a choice: either you could continue learning computer science (kind of artistic path, where you could for example attend courses with sophisticated string matching algorithms) or focus on software engineering. You still had to get some solid programming background during this time.

I chose software engineering, because I was never very interested in abstract problems. But even those who liked pure computer science had to:

  • program small file system in user space, create a linux kernel module and modify kernel itself, write a pure object oriented game in SmallTalk,
  • write own communication protocol and then implement one, chosen by the teacher (it was really cool, when programs of two students could easily communicate, though they didn't collaborate before),
  • create a larger project in Java in a team of four,
  • build some functional programming project,
  • write several solid programs in C for parallel programming (the ideas were abstract, but reviews were pretty harsh, like losing points for not providing proper output, when program failed, like a good unix program should do),
  • create a web portal using some web framework (we chose django, which made me love this framework),
  • create a pretty large program using LAMP (I still have nightmares about php, but used postgresql instead of MySQL and I am very happy about knowing this DBMS now),
  • and if someone chose, he could write a program for his masters thesis - I wrote 10k lines python desktop program using PyQt.

Maybe there were other projects, but I simply forgot them now.

My point is: it all depends on the school. I have great dislike for pure software engineering approach, where Java is the main language. I had to help a friend once, who attends such school and had to write some program for parallel programming. I had to write it for him basically, because he though, that sizeof(some_string) in C gives the length of string.

I will be honest: I hated math, I was in pain, when I had to prepare for abstract tasks, that would be served on algorithms/data structures exams. But it gives me certain edge: I can think in a very abstract way. It's like when you learn martial arts and don't keep your guard (at least in those, where you are supposed to). Coach just keeps coming and hitting you in the head, when you lower your hands, because you forgot or because you are to tired to keep them up. But after some time, you just keep them up. And it becomes really hard to hit you in the face. The same with abstract algorithmic problems. Understand content of Introduction to Algorithms and really few things will surprise in work.

gruszczy
  • 612
  • 3
  • 13
1

I think the answer is yes (in a way).

The thing is it is not possible to teach to kids in a short period of time programming. They should be tought the programers logic thinking, how to solve (in a smaller scale) the programmer´s problems.

I´m certain the school´s programms should be revised, I my very small "third world" country, fortunately, an effort is being made for this to happen. We are the first country to implement OLPC program; http://laptop.org/en/

Trufa
  • 604
  • 4
  • 15
1

From my own experience (I'm a student at the moment), I've gotta say yes,it is an excuse. Everybody refers to CS as a science that teaches us all the basics of computers, and SE as a special branch in CS that is explicitly teaching programming. Imo, everyone that has BS in CS, has to know how to write good and optimized code (even if programming isn't his/her speciality area). So yes, if I had a almighty position of making such a decision I would force the students to gain good programming skills.

Ilija Eftimov
  • 238
  • 2
  • 9
  • My degree is titled Computer Science and Software engineering, and was geared to give you the best of both worlds, i.e. be a competent programmer, and know the theory enough to be able to go on to grad school or research. I think that was a good approach. – Michael K Nov 12 '10 at 19:00
1

Assuming the goal is to educate good software engineers (programmers) because the world needs them, is it OK to answer by saying what I think should be taught?

First, this is important because currently the knowledge transfer is very inefficient. When prospective programmers are in classes, their minds are open and they absorb what they are taught. At the same time, professors (I was one) all too often are more interested in filling the graduate-school pipeline with students who can work on esoteric subjects. When the objection is raised that students are not being prepared for real-world problems, I've seen professors claim that's not their job. That's the real world's job.

Then when students become programmers in the real world, are they eager to learn from their new colleagues? Not in my experience. Rather they are eager to spread whatever gospel they acquired in school. I remember as a student and young practitioner thinking how hard it was going to be fostering new ideas among the old fuddy-duddies out there. Now that I'm an old fuddy-duddy I see how hard it is to open new programmers' eyes to the difference between theory and practice.

I was an engineering student, in mechanical and later electrical engineering. A fundamental part of that was a) mathematical foundations, and b) practical problem-solving. Software engineering should be like that, not just programming.

I think software engineering (programming) should be taught with enough computer science to be a working knowledge - basic automata theory and information theory. These do not need to be done in great depth. After basic programming skills are taught, there should be cooperative projects of nontrivial size. An essential part of these should be proposal and consideration of alternative solutions of specific problems, with analysis of pros and cons, not just the latest religion or "next big thing" or one-size-fits-all. Finally, there should be cooperation and partnership between industry and academia, so that ideas and improvements can be communicated both ways, greatly enhancing quality control.

Mike Dunlavey
  • 12,815
  • 2
  • 35
  • 58
0

Those that can, do; those that cannot, teach.

At my university, the knowledge base of the teachers is woefully deficient. I have seen teachers struggle to understand how to represent semi-structured tables in XML while holding a PHD in Database Design. I've seen my Assembly teacher ask me what my code is doing when it's his code snippet I copied and pasted. I've seen my software design teacher tell us the Agile method is the same as the waterfall method, only faster, that iterative development process model has and can only have 3 iterations because that's what the picture the book uses as example depicts. One of my teachers did not even know what an elseif statement was.

I don't believe they are 'coping out', or making excuses, I truly believe they are doing the best they can with their experiences, which they have precious few.

I agree with the other people posting here that 4 years is not enough to become a seasoned programmer, but the experience my teachers have had is not enough to make them seasoned either. It's much like in Ender's Shadow, where Bean notices the metrics used by the teachers in battle school fall short because the last war which is the guide rule, was too short to truly show what is actually needed. In otherwords, the teachers were doing the best they could, but failed to have the experience to know what is really needed to make a good commander (or good programmer in this case).

Malfist
  • 3,641
  • 5
  • 29
  • 40
  • 3
    I think many of your examples are obviously just cases where your teacher is trying to simplify things for your own benefit. `Those that can, do; those that cannot, teach.` I also don't agree with this at all: academic and industrial careers lead to completely different lifestyles. Much of the world's research comes from academics. And I don't see any way in which you answered the original question. – Nobody Oct 13 '10 at 18:11
  • 2
    What does XML have to do with database design, besides the fact that one could if one were so uninterested in performance, use XML as a backing store for a database? Not to say that some teachers can miss the point (I remember arguing with an instructor over points removed due to "excessive commenting" when the curriculum to that point taught "comment like the wind") but it's sort of overstated. If someone wants to learn Java, there are cheaper ways of doing it than going through a CS curriculum. – dash-tom-bang Oct 13 '10 at 20:27
  • 1
    There's also the fact that some universities are worse than others, and yours may have a particularly bad CS department. Traditionally, CS people with graduate degrees have been able to make a lot more money in industry than academia, so the ones in academia were the ones who really want to be there and the ones who couldn't hold a job in the real world. I've seen both, and suspect the ratio varies across universities. – David Thornley Oct 14 '10 at 15:39
  • @dash-tom-bang, XML is a near perfect example of semi-structured databases. http://en.wikipedia.org/wiki/Semi-structured_model – Malfist Oct 15 '10 at 13:24
  • 1
    XML used like this is still an *implementation* of a database theory. It is not itself the theory. – dash-tom-bang Oct 15 '10 at 16:27
0

Computer Scientists and Software Engineers are different. The scientist are the guys who perform the crazy experiments and come up with the algorithms that we Software Engineers leverage to be better.

Think of chemists conducting experiments for a pharmeceutical company. They don't care about how to produce the chemical en masse. Nor do they care about marketing, packaging, distribution or anything that happens to the drug after they discover it. Hell they don't even care about the certification process. All they care about is finding a chemical that has an effect when given to test subjects. The company is responsible for moving it beyond that.

Computer Scientists are like those chemists. All they do is test out theories with code. They don't care about how maintainable the code is. They prove a theory and move on to the next one. Someone else packages that algorithm up and makes it useful for the masses and we have MP3 or computer vision with the Kinect or streaming video on your iPhone. So CS!=SE is a valid argument.

WRT the second part of your question. If I offered a degree in Music Theory, there might be a required course in songwriting or something, but wouldn't require anyone to study an instrument. It's up to the student to seek out the knowledge they want. Computer Science is not Software Engineering...if you want to learn SE, take a double major.

Michael Brown
  • 21,684
  • 3
  • 46
  • 83
0

Edsger Wybe Dijkstra was a Dutch computer scientist.

He received the 1972 Turing Award for fundamental contributions to developing programming languages, once said:

"COMPUTER SCIENCE IS NO MORE ABOUT COMPUTERS THAN ASTROMY IS ABOUT TELESCOPES."

CS is REALLY DIFFERENT FROM a SE. ( CS != SE ).

A CS is a scientist who has acquired knowledge of COMPUTER SCIENCE.

COMPUTER SCIENCE or computing science (sometimes abbreviated CS) is the study of the theoretical foundations of information and computation and of practical techniques for their implementation and application in computer systems.It is frequently described as the systematic study of algorithmic processes that create, describe, and transform information.

Computer science has many sub-fields for example:

  • Theoretical computer science
  • Theory of computation
  • Algorithms and data structures
  • Computer elements and architecture
  • Multiprocessing
  • Computational science
  • Artificial Intelligence
  • Software Systems

Many of us don't need any of this skill in every day work or at least a little of it.

SOFTWARE ENGINEER (SE) is a profession dedicated to designing, implementing, and modifying software so that it is of higher quality, more affordable, maintainable, and faster to build. It is a "systematic approach to the analysis, design, assessment, implementation, test, maintenance and re-engineering of a software by applying engineering to the software"

As a CS knowledge he's suppose to have the knowledge to manage real complex problem without knowing any really good programming language. IMHO here we can open another thread, where a DEGREE for me is ONLY a STARTING POINT and not a END GOAL.

As SE knowledge he's suppose to have the knowledge to manage the production of this real complex problem and manage the development of a team or a project about this field.

Together make the research in science made by a CS in applied Science with the help of a SE.

I don't mean CS is better than SE, i mean CS != SE.

This kind of question is the same question that non computer people ask to themself when ask to you why, as programmers, you are not able to fix by phone the problem of the program X,Y,Z on the operation system J,M,N. ;)

Actually I'm really bored of coding after 10 years of unix system development in security field and after reading this question i get the point, i need to study more computer science and less computer language and computer system or protocol!

No one at my work can handle the difference about SE and CS! it's really a bad things.

If you think that a CS can be an excuse to bad programming skill you are really miss the point about what it's a CS and what is SE.

I suppose you are a SE, do you know for example that all language, all paradigm and all computer language related stuff can be expressed mathematically in a set of partial recursive function and whatever you learn a new language, ANY NEW LANGUAGE, you are only learning a new abstraction over the SAME recursive partial function ?

have fun :)

boos
  • 803
  • 2
  • 7
  • 13