23
votes

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.

17
  • 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. Oct 13, 2010 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. Oct 13, 2010 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, 2010 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. Oct 13, 2010 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. Oct 13, 2010 at 16:35

17 Answers 17

27
votes

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).

12
  • This is exactly my thought, but explained much better than my answer. Oct 13, 2010 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? Oct 13, 2010 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, 2010 at 16:45
  • 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. Oct 13, 2010 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, 2010 at 10:16
25
votes

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)

7
  • +!1: I see your point, but it's not just 'polished'. Many lack some very basic skills. Oct 13, 2010 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, 2010 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. Oct 13, 2010 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. Oct 13, 2010 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. Oct 13, 2010 at 23:53
10
votes

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.

7
  • 2
    Programming is a craft, not an art. Oct 13, 2010 at 20:22
  • 6
    Programming is craft, engeneering and art. Oct 13, 2010 at 23:14
  • 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, 2010 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, 2011 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, 2011 at 15:52
8
votes
  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.
2
  • +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, 2010 at 16:11
  • since you touched on US Education system and the role of profit, here is an obligatory Milton Friedman Choir: youtube.com/watch?v=W3Seg0JE1PM
    – Job
    Jan 19, 2011 at 20:37
7
votes

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.

6
votes

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.)

1
  • It's not crazy, it's an epidemic. About 90% of the code I've seen written by my peers is as maintainable as the leaning tower of Pisa. Oct 28, 2012 at 21:50
5
votes

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.

2
  • I would love to try something like that out. Oct 13, 2010 at 15:59
  • You should contact your local university and see if they have something like it. Where are you located?
    – Beth Lang
    Oct 14, 2010 at 2:47
3
votes
  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.

3
  • 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". Oct 13, 2010 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, 2010 at 3: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, 2011 at 19:47
3
votes

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.

7
  • Or a Master Craftsman / Apprentice program Oct 13, 2010 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. Oct 13, 2010 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, 2010 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. Oct 14, 2010 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. Oct 14, 2010 at 15:13
3
votes

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.

3
  • ++ - 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. Oct 13, 2010 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? Oct 13, 2010 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, 2010 at 16:08
2
votes

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.

1
  • Sounds like a good program. Some theory. Lots of practice. Jan 19, 2011 at 22:07
1
vote

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/

1
vote

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.

1
  • 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, 2010 at 19:00
1
vote

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.

0
votes

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).

5
  • 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, 2010 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. Oct 13, 2010 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. Oct 14, 2010 at 15:39
  • @dash-tom-bang, XML is a near perfect example of semi-structured databases. en.wikipedia.org/wiki/Semi-structured_model
    – Malfist
    Oct 15, 2010 at 13:24
  • 1
    XML used like this is still an implementation of a database theory. It is not itself the theory. Oct 15, 2010 at 16:27
0
votes

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.

0
votes

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 :)

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