What Should We Teach New Software Developers? - Bjarne Stroustrup

  • (2 Pages)
  • +
  • 1
  • 2

23 Replies - 8297 Views - Last Post: 22 January 2010 - 02:12 PM

#1 skyhawk133  Icon User is offline

  • Head DIC Head
  • member icon

Reputation: 1868
  • View blog
  • Posts: 20,280
  • Joined: 17-March 01

What Should We Teach New Software Developers? - Bjarne Stroustrup

Post icon  Posted 03 January 2010 - 09:59 PM

http://cacm.acm.org/...rs-why/fulltext

Interesting read with some very valid points.

Quote

For many, "programming" has become a strange combination of unprincipled hacking and invoking other people's libraries (with only the vaguest idea of what's going on). The notions of "maintenance" and "code quality" are typically forgotten or poorly understood. In industry, complaints about the difficulty of finding graduates who understand "systems" and "can architect software" are common and reflect reality.


Discuss....

Is This A Good Question/Topic? 0
  • +

Replies To: What Should We Teach New Software Developers? - Bjarne Stroustrup

#2 macosxnerd101  Icon User is offline

  • Self-Trained Economist
  • member icon




Reputation: 10468
  • View blog
  • Posts: 38,799
  • Joined: 27-December 08

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 03 January 2010 - 10:49 PM

I agree with him completely. His statement about a CS professor who claims to never code seems to be reflected in many of the intro-level CS and IT courses. In contrast, however, the lower level physics courses (like Engineering Physics I) seems to be one of the hardest courses and a weed-out course (going on what I've hear from my teachers). We need our professors to step it up and teach us the essential theory without forgoing the critical practice and application.

For the most part, this seems to be the case in my HS Specialty Center for IT that I'm enrolled in. While the lower-level classes are very practical, the two upper level classes (AP CS and Discrete Math) tend to be a lot of theory without a ton of the practical. However, we seem to be striking an appropriate balance at the HS level, as this program is the best program regionally for preparing HS students for a senior internship (as commented by businesses like Genworth Financial and McKesson).

Now for continuing this trend into college, I think the content as well as the rigor needs to be changed. Again, while the essential theory courses like Data Structures and Algorithms are essential, we also need more courses for developing and maintaining applications and Information Systems Design & Development for group development. In terms of rigor, a good CS curriculum should prepare students to enter either the business or research side of the industry in the same way Chemistry, Physics or Biology majors prep their students.
Was This Post Helpful? 0
  • +
  • -

#3 dorknexus  Icon User is offline

  • or something bad...real bad.
  • member icon

Reputation: 1256
  • View blog
  • Posts: 4,618
  • Joined: 02-May 04

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 03 January 2010 - 11:20 PM

I think Dr. Stroustrup makes some fantastic points. The problem with all forms of academia is that they are always alienated from industry. This has to be expected though, academia represents the bleeding edge of computational theory while industry represents solid and practical production; these topics rarely intersect.

Dr. Stroustrup goes on to say that what separates a computer scientist from some other sort of professional hacking out code is a

Quote

...mastery of the core of CS." What should that "core" be? It would contain much of the established CS curriculum—algorithms, data structures, machine architecture, programming (principled), some math (primarily to teach proof-based and quantitative reasoning), and systems (such as operating systems and databases). To integrate that knowledge and to get an idea of how to handle larger problems, every student must complete several group projects (you could call that basic software engineering). It is essential that there is a balance between the theoretical and the practical—CS is not just principles and theorems, and it is not just hacking code.


Again, I must agree with Dr. Stroustrup: anyone can sit down at a computer and start hacking out code that eventually resembles a semi-operative piece of software. Just like anyone can assemble, say, a go-cart out of aluminum pipes and a lawn mower engine. What separates random code hackers from true professionals is the ability to produce useful, stable, secure, and well designed pieces of software. You don't need a degree to be a professional software engineer but you better have a meaningful understanding of Dr. Stroustrup's "core" components.

Professionals understand how all components of a computer function and interact (from hardware to software) so that they get the whole picture when they make design decisions. Sure a mechanic can plop pre-built parts into a pre-fabricated car body and call it a custom automobile, but does he truly understand his creation? Does he understand at a decent level how those parts are interacting? What happens when something goes wrong in one of those pre-built parts? What happens when the customer wants a different configuration that isn't made to order by some pre-fab component? Suddenly the value of a mechanical engineer shines through.

Academia will always struggle with the balance of theory and production. I've encountered it myself. A group project I recently completed was composed of half of my group essentially unaware of how to write semi-coherent and functioning C++. They were especially clueless when it came to OO design patterns.

Are all computer scientists professional software engineers? Definitely not. Computer science isn't just about programming, in fact, it's hardly about programming. Computer scientists have a far broader and deeper understanding of computational theory and automatons than some random code hacker. Their purpose isn't to understand programming, their purpose is to understand computers.

A BS in Computer Science offers little more than a solid foundation for any specialization involving computers or computational theory. The problem is that the majority of those specializations will require you to know how to program at some level. Most institutions will spend all of their time educating their students on the theory of computers and rarely/never ask them to implement moderately large software solutions.

It all comes down to what you want to achieve with your degree. For some students (those interested in research), the standard theoretical education suites them just fine. They have little need to understand complex applications or specialized design patterns. Those students hoping to go on to become professional software engineers will have to do more work on their own to supplement the theory. The theory is just as important for professional software engineers, but you also have to be a crafty programmer which comes with practice and time.
Was This Post Helpful? 0
  • +
  • -

#4 skyhawk133  Icon User is offline

  • Head DIC Head
  • member icon

Reputation: 1868
  • View blog
  • Posts: 20,280
  • Joined: 17-March 01

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 03 January 2010 - 11:45 PM

So based on what you've said, and what Stroustrup's article says... should most employers stop requiring "Computer Science" degrees and instead look for "Software Engineering" degrees which are much more focused on the development, operation, and maintenance of software.

It seems to me people say "I want to be a programmer" and they immediately enroll in their closest Computer Science program when in fact they want to develop software, not research or teach. So is "Computer Science" the right program. Or is Stroustrup trying to say that CS programs need to include more software engineering theory.

There is obviously a place for true CS and I think your new job and many scientific and mathematical fields would favor a CS degree... but I think there is a much larger demand for "developers" that understand large scale software engineering and don't care as much about the science/math side of things.

Will we see more "Software Engineering" type degree programs spring up, or will CS adapt to what employers need from both the science/math side, as well as the true development side?
Was This Post Helpful? 0
  • +
  • -

#5 Martyr2  Icon User is offline

  • Programming Theoretician
  • member icon

Reputation: 4332
  • View blog
  • Posts: 12,127
  • Joined: 18-April 07

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 03 January 2010 - 11:48 PM

I found his article to be a little long winded to describe a relatively obvious disconnect. I think many of us have been screaming out a warning about this for years and yet it continues. I do agree with many of his points but I am going to take it one step further in saying that this disconnect has a bit of a hidden cycle that Stroustrup fails to mention. Many industries that hire programmers don't know what they want out of a programmer and academia trains students with what industry tells them.

For instance, a company may deal in banking or travel or run some type of retail outlet... they need a programmer on staff to develop their applications etc. But they don't know what they need in the developer. They don't even have the time to research what they need. All they know is that they want a web site or some kind of app that does a business function. This is obvious when you look at job boards etc where they request everything under the sun. Then when they do find someone, they turn to a recent graduate that flashes some skills and gets hired and often they find out the job is not what they were hired for. Academia asks industry what they want from their employees, industry lists this and that when really they needed something else. Academia then trains others on the feedback and the disconnect grows.

Everyone just needs to stop for a moment, take inventory of what they are doing and re-evaluate what they truly need. Industry, ask for what you need, not what you want. Academia, listen to what industry needs not anticipate what they want. If everyone can do this, the gap will shrink. Simple as that.

:)

Edit: Just as an example, I know a company right now asking for a ASP.NET developer to make a website... they don't have one ASP.NET application in their portfolio as of right now and have over 200 websites using other languages that work just fine.

This post has been edited by Martyr2: 03 January 2010 - 11:53 PM

Was This Post Helpful? 0
  • +
  • -

#6 gunslnger  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 4
  • Joined: 04-March 09

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 04 January 2010 - 12:56 AM

View Postskyhawk133, on 3 Jan, 2010 - 10:45 PM, said:

So based on what you've said, and what Stroustrup's article says... should most employers stop requiring "Computer Science" degrees and instead look for "Software Engineering" degrees which are much more focused on the development, operation, and maintenance of software.


That's what I think should happen. I took 5 years of college 18 years ago and didn't finish my CS degree, but I've worked as a programmer for the past 20+ years (yes, before and during college) and while my college education helped a little bit, most of the actual software engineering principles in Stroustrup's core I taught myself. And going back to college now to finish my degree I'm seeing even more how little of it I really need to know to do my job. Some of the classes were a good background, but then I'm also an embedded systems programmer where you do need to know the internals of the processor more intimately.

View Postskyhawk133, on 3 Jan, 2010 - 10:45 PM, said:

Will we see more "Software Engineering" type degree programs spring up, or will CS adapt to what employers need from both the science/math side, as well as the true development side?


I don't think anything is going to change any time soon. My classes now are the same ones they were 15 years ago, that's why I'm able to finish my degree now, I don't have to retake a bunch of classes. And industry just cares that you have a degree in something somewhat related as they're going to train you on the specifics for their job anyways.
Was This Post Helpful? 0
  • +
  • -

#7 BenignDesign  Icon User is offline

  • holy shitin shishkebobs
  • member icon




Reputation: 6018
  • View blog
  • Posts: 10,444
  • Joined: 28-September 07

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 04 January 2010 - 05:01 AM

First, let me say I wholeheartedly agree with Martyr... that was quite a long-winded piece for pointing out what many of us have known for years.

I find one of the biggest problems in academics to be the academic need to produce more academics. I've met far too many people in my life who take the professional student route (ie, straight from high school to bachelors degree and directly into masters programs, often spending their years toward their doctorate teaching at the school they're attending). These so-called professionals or experts, have never worked a single day in the industry. And more often than not, they have developed a sense of superiority from it all - that somehow, by choosing more education, they have risen above the lowly programmer in the field.

Yet it has been my experience, as a former student of these institutions, that the absolute best of the best instructor-wise are those who have real-world experience. I learned infinitely more from a professor who spent 25 years writing code for IBM before pursuing additional education than I ever have from someone who never left the classroom.

In addition, many CS programs are outdated in need of severe overhaul as they do little to address the actual needs of the industry. My alma mater, for example, offers FORTRAN as an elective course, but makes COBOL a graduation requirement. With only the tiniest percentage of companies still using these languages, why would either of them still be required course work?

And there are cases like the institution where I am employed that offer no programming whatsoever. There is a "web design and development" major, but the closest its students get to programming is a basic course in Dreamweaver. Throughout the course of their years at this institution, the students will never see a text editor, a database or an actual programming language. They will open Dreamweaver, make a pretty picture, add some text and voilà! They've created a top-of-the-line, cutting edge website. The worst part is they are told they are learning skills that are needed and wanted in the real world. The course's professor will tell you himself that he has never written a single line of code. That everything he knows about web design and development came from doing step-by-step tutorials in an "Intro to Dreamweaver" textbook.

The bottom line - as sad as it is - is CS/IT grads are ill-prepared for the workforce. The degree will leave them with a spit-shined glossing over of the topics, but little in the way of actual knowledge or skill. I see so many students on the boards asking what they need to land jobs. The best advice I can offer is to develop an out-of-classroom portfolio - somewhere they can direct potential employers to say "look at me! I know my education probably sucked, but I took the initiative to create some really great things on my own. I may not be an expert, but I'm working on it."

This post has been edited by BenignDesign: 04 January 2010 - 05:04 AM

Was This Post Helpful? 0
  • +
  • -

#8 SpeedisaVirus  Icon User is offline

  • Baller
  • member icon

Reputation: 114
  • View blog
  • Posts: 855
  • Joined: 06-October 08

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 04 January 2010 - 09:59 AM

His line that a masters degree should be required to enter industry makes him sound a bit retarded when you consider overall low graduation rates of BS CS programs.

The biggest issue in education is professors letting people pass their courses that simply haven't learned the material. There are way too many people I'm working with in my 300/400 level courses that in our intro courses never were able to write functioning code and still in the upper level courses barely show proficiency to write helloworld. They will pass, they will graduate, and they will make the degree look bad to industry as a whole. Group work especially encourages this when the professor doesn't want/listen to feedback about group members and just slaps a group grade on the assignment that only 2 out of 3 made any contributions.

Sure the cirriculum needs to be revamped, there definitely is a lot left to be desired. First though, the standard of work required to pass needs to be raises and is the fastest way to see some results.
Was This Post Helpful? 0
  • +
  • -

#9 KYA  Icon User is offline

  • g++ jameson.cpp -o beverage
  • member icon

Reputation: 3101
  • View blog
  • Posts: 19,141
  • Joined: 14-September 07

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 04 January 2010 - 02:06 PM

Maybe I just chose my electives well, but my Computer and Information Science degree had an ample amount of both theory and implementation. There were a few classes where we devoted the entire semester to learning engineering principles. Code was few and far between since the purpose was that of an architect.

On the flip side, there were also pure code/CS classes. Data abstraction/structures, discrete math, and things of that nature. I am still under the notion that the more math one takes, the better programmer, software engineer, teacher, research, etc... they will be. The same applies [again in my humble opinion] with fundamental CS concepts. How can you develop if you don't understand [insert your topic of choice here]. This is why a hardware course is often required for the CS/SE student. An understanding of what "lies beneath" is absolutely essential.

I would rather have/be a well rounded individual who can pick up new concepts quickly then someone who forsook one or the other.



edit: The disconnect between academia and industry is certainly not limited to the CS realm. Any major discipline has the same issue(s) going on.

This post has been edited by KYA: 04 January 2010 - 02:09 PM

Was This Post Helpful? 0
  • +
  • -

#10 SixOfEleven  Icon User is offline

  • using Caffeine;
  • member icon

Reputation: 945
  • View blog
  • Posts: 6,342
  • Joined: 18-October 08

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 04 January 2010 - 02:59 PM

With out reading this post or the article first, I had made a similar observation reading questions in the C# forum like this one which prompted me to write this topic in the C# Programmers forum. NickDMax also made a similar observation in this topic: Is the Internet Ruining Academics?

In many cases, today's graduates have been taught to "Write whatever works and do not worry about it." making for applications that are not easily maintained and have many, as I like to call the, "undocumented feature" or bugs. The fact that there are so many patches for different projects makes me believe this. Should we, as developers, be held responsible for writing good, solid code that works properly, in all cases, or just get the product out the door? When I was in school 20 years ago my teachers emphasised the idea that: "Just because you can do something in code doesn't mean that you should." It is better to write solid code and maybe be late getting the project out than to write shoddy code that is hard to maintain. There seems to be this rush to get the product out there, and as Martyr2 said, quite often the person requiring the product doesn't know what they need, they just know what they want. In many cases it is much better to tell the client. "No, that isn't what you need, this is what you need."

I believe that many people out there hear the buzz words and think: "Ooo, I need that for my company." when it is totally unrelated to what they actually need but since it is a hot topic they believe this is the case.

I haven't been truly in the industry for a few years so I don't entirely know what is going on in the industry but just from what I've seen here on Dream.In.Code I see where those studying computer science are heading and it is scary.
Was This Post Helpful? 0
  • +
  • -

#11 WolfCoder  Icon User is offline

  • Isn't a volcano just an angry hill?
  • member icon


Reputation: 783
  • View blog
  • Posts: 7,610
  • Joined: 05-May 05

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 04 January 2010 - 05:40 PM

Yeah, I really hate being taught topic of Computer Science by professors who can't program that well. Theories are worthless to me if I can't use them.
Was This Post Helpful? 0
  • +
  • -

#12 ayman_mastermind  Icon User is offline

  • human.setType("geek");
  • member icon

Reputation: 126
  • View blog
  • Posts: 1,860
  • Joined: 12-December 08

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 05 January 2010 - 03:52 AM

Quote

Yeah, I really hate being taught topic of Computer Science by professors who can't program that well. Theories are worthless to me if I can't use them.


Agree, that's the case with me, I am being taught lots of theory, so I am always working on personal projects in order to make a good portfolio for myself and I guess I am doing well so far. :)
Was This Post Helpful? 0
  • +
  • -

#13 EdwinNameless  Icon User is offline

  • D.I.C Addict
  • member icon

Reputation: 120
  • View blog
  • Posts: 710
  • Joined: 15-October 09

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 05 January 2010 - 04:36 AM

View Postskyhawk133, on 4 Jan, 2010 - 05:45 AM, said:

So based on what you've said, and what Stroustrup's article says... should most employers stop requiring "Computer Science" degrees and instead look for "Software Engineering" degrees which are much more focused on the development, operation, and maintenance of software.


I don't about your side of the ocean, but AFAICT, that's how things have been working here for quite a while now (well, that's what I have observed in IE/UK/FR in the past decade).

I don't know many shops that ask candidates whether they know the big O of an algorithm, or if they are into lambda calculus. In my experience, they are more likely to ask whether you know the Visitor pattern, and an example on how to use it, with the pen on the whiteboard, or how good you are at solving problems (oh, and give me a concrete example of that too).
Was This Post Helpful? 0
  • +
  • -

#14 Programmist  Icon User is offline

  • CTO
  • member icon

Reputation: 252
  • View blog
  • Posts: 1,833
  • Joined: 02-January 06

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 05 January 2010 - 07:29 AM

I've taken several graduate-level courses where the professors assign programming homework but admit that they don't know how to program well enough to grade them, so one of two things happens. 1. a TA grades them. 2. the programs themselves are not graded - only the output. #1 is the best option of these two, assuming the TA is not using option #2, but it's sad and sends the wrong message to aspiring graduate-developers.

Since receiving my diploma I have made observations about what was lacking from my CS program. I have sent emails to and had conversations with faculty members, deans, and the IPP (Industrial Practice Program) coordinator about the need to include more industrially-useful content. I really thought it a travesty that people graduating with a masters in SW Engineering couldn't "program their way out of a wet paper sack." I wanted to bring it to their attention. But I hit the same wall Stroustrup was talking about. I realized that many of the people involved were proud to have that separation between academia and vocation. And the IPP coordinator? He's not even a CS graduate. Meanwhile the university is churning out a lot of useless wannabe programmers. The few that actually graduate with the skill set needed to get a job typically do so because of extracurricular practice/study. Unfortunately not all employers can tell the difference between two fresh CS grads, one of whom is useless. Trust me. I've worked with some of these people and it's frustrating to have to teach them very basic programming concepts when deadlines are looming.

Quote

My suggestion is that the first degree qualifying to practice as a computers scientist should be a master's—and a master's designed as a whole—not as a bachelor's degree with an appended final year or two. People who plan to do research will as usual aim for a Ph.D.

I mostly agree with this. The problem is that it needs to be standardized across the country (world?) for it to be useful. Another problem is that not every bit of programming requires a masters degree. There is a web developer and Javascript guru that works for my current client. He produces some great code and most of what he does is on a smaller scale, architecturally. I'm ambivalent on this last point though because what happens if the scale grows and the person writing small-scale scripts finds themselves having to design larger architectures than they are prepared for?
Was This Post Helpful? 0
  • +
  • -

#15 TheStuff  Icon User is offline

  • New D.I.C Head
  • member icon

Reputation: 1
  • View blog
  • Posts: 48
  • Joined: 16-April 09

Re: What Should We Teach New Software Developers? - Bjarne Stroustrup

Posted 05 January 2010 - 09:34 AM

Very interesting read. I don't have anything intelligent to add like you people, but I just want to say you have all scared me into law. Thanks a lot.
Was This Post Helpful? 0
  • +
  • -

  • (2 Pages)
  • +
  • 1
  • 2