BT
x Your opinion matters! Please fill in the InfoQ Survey about your reading habits!

Mitchell Harper: University Education of Software Engineers is a Waste of Time

by Michael Stal on Nov 15, 2011 |

Mitch Harper, co-founder of BigCommerce.com, claimed in a recent issue of the Sydney Morning Herald that university education might be the wrong way to become a software engineer. According to Harper, a self-educated software engineer without an university degree: universities leave their students rather unprepared for the realities of being a software engineer. He also mentioned the reasons for this assumption:

(Australian) startups need graduates who can hit the ground running, who are proficient in PHP, Python and Ruby (among other modern programming languages), and who, ultimately, understand the practical side of software engineering as opposed to just the theoretical side which they learn at university.
 

What could appear more a national issue of Australia, has also been discussed in other countries. For example, Dan North’s blog posting “Programming is not a craft” caused some intensive discussions by readers. North considers programming not as a proper profession. In his opinion, the entry bar for becoming a software engineer seems to be too low.

Recently, some other entrepeneurs took contrary standpoints to Harper’s arguments. The CEO of Freelancer.com, Matt Barrie mentioned in an article on November 14th:

I read Mitchell Harper's opinion piece "Want to be a software engineer? Don't go to university" in the Sydney Morning Herald on Friday with horror […]  Encouraging passionate young students to forget university because the latest fad of a language isn't being taught isn't just fundamentally wrong, it's dangerous. You won't find a job very easily, and if you want to join the tech boom and start your own company, you'll find it an order of magnitude harder to get someone to back you

In the same article, Adam Brimo, co-founder of mijura.com,  explains:

Anyone can learn to write code but they will never be a Software Engineer or a Computer Scientist. They won't be able to design large scale financial systems, search engines or contribute to the next powerful programming language. They can build you a simple website for a thousand dollars but they can't build the next Google and they won't create the technologies of the future. They will be displaced by them

Harper might not be right with his low opinion on software engineering degrees. At least, he has triggered an interesting discussion. Do universities provide really students with the appropriate software engineering skills? Is university education too much emphasizing on theoretical aspects? But maybe, university education is highly underrated in this context.

What is your take on this debate?

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Fast-food style programming by Raymond Feng

I'm not sure if Mitch was just looking for cheap labors to do fast-food style programming. Personally, I still benefit from the computer science courses taken 20 years ago in the college. Maybe I'm too old :-(.

Big?Commerce by Paulo Dias

Sometimes we see these "rare birds" appear to gain prominence and ride the waves of a few examples of brilliant people who have not completed their courses, overlooking a sea of ​​others.

Again confusing the tree to the forest.

What should seriously discuss is whether it justifies the existence of so many technical universities, dedicated solely to the study of technology or whether they should not"contaminate" the courses in different fields of study such as, medicine, physics, chemistry,literature, law, accounting, etc., with further study of technology.

In my opinion the fact that these courses do not have enough technology knowledge continues to increase the impedance between the requirements and implementation of products to answer seriously to the expectations of these large areas of knowledge.

But this is probably a waste of words, since this person is only concerned with is big ... self.

Disagreement from someone that doesn't have a degree by Some Guy

I've been doing software development fulltime professionally for 14 years now. All in all, I feel pretty good about the level of success in my career. I'm not uber wealthy, never made it big with a startup, but I've had the chance to work in other countries, am a technical lead and not horribly concerned about losing my job (I've got other offers pending). All that said, I don't have a degree. I've taken classes here and there (with a piss poor attitude) and ultimately have 11 more classes to go. I've matured a lot since the last time I "decided" to continue taking classes and have started again this semester. What I'm finding is that I'm learning a ton of stuff. Design patterns that I've never been exposed to before, different types of problems than your typical business problems, and a better understanding of very fundamental things that I'm almost embarrassed I didn't know. Already, there have been several cases where I had a better understanding of an article, api or configuration settings based off of things I've learned this semester.

Anyway, that's my 2 cents...

It depends !! by Ankur Dhama

Most of the applications that are built today (almost 90%) are basic CRUD data application (or you can call them data entry applications), If you want to be that sort of developer then go ahead and you wont need any solid foundation in computer science. But in case you really want to build the next generation of technology/platforms/products then you certainly need to understand those theoretical (which in future becomes practical to give way for new tech) and basic concepts of computer science.
Remember: Writing code is easy (one with good enough logical skills can learn to do it in few weeks), designing systems is not.

Scale by Eben Roux

"They can build you a simple website for a thousand dollars but they can't build the next Google..."

Between those extremes lies quite a bit. A Google comes around once in a lifetime. One cannot expect every developer out there to create a Google. Many of these big success stories don't necessarily take a rocket scientist. There were search engines before Google and there were social networking sites before Facebook. There is more to it than brilliance in software engineering.

If you want to go for a tertiary education: fine. You will eventually make the connection to the theoretical concepts once you start working.

If you don't want to go for a tertiary education: fine. You will eventually make the connection to the theoretical concepts once you bother to pick up a book.

No difference by Ralf Westphal

As a consultant I work with many different teams. And my impression again and again is: there is hardly a difference in practice between self-educated devs and devs with a university degree. Unless a team is mostly academics there is almost no difference in coding style, ability to analyse problems, work in a team, approach a programming problem, deal with requirements etc.

And if there is a difference, then it is not necessarily in favor or academic education. Devs with a degree or even teams with mostly devs with a degree do not shine per se. More often than not they internalized formal approaches yielding suboptimal results.

even 8 years later: 100% agreement on what my university has taught me! by Bojan Antonovic

My university (ETH Zürich) has told us how to write maintainable, robust and cost efficient code. Until now, nothing turned out to be wrong! On the contrary: In reality I have seen messy, unmaintainable, high cost code, which only came from non-academic people!

If you want to learn programming (or more) by yourself, then it takes the same amount of time like going to a university and doing (at least) a bachelor!

FYI: I work as a contractor. I'm not paid to do philosophy.

University degree yes, but curriculum matters. by Lazar Todorov

I disagree with the statement that university degrees in Software Engineering or Computer Science are wasting of time.

The problem is that most of the universities don’t adopt their curriculum in SE or CS fast enough to meet the demand of the industry. Even the leading universities that break the frontiers in the field take time till they pass the knowledge from higher academic level to the base. Also many of their promoted PhD are already working in the industry that also take time till that knowledge are returned back to the students. Software industry is changing rapidly, but transferring of the knowledge is too slow to follow.

What I also find useful studying on a university with good curriculum gives the students a base and bright knowledge in many fundamental areas that are good fundament for further education and personal development. Most of the students will use that heritage in their professional live.

In contrast self-studies could be pretty chaotic, without direction and with very tight scope. To rich the knowledge of a good university graduate, the self-student will need more time and effort in case when she knows what topics need to be learned. Often self-student misses their learning direction trying to fill the holes of their knowledge resulting they give up or misunderstands the topics. I guess that most of the self-student learn when they are already professionally occupied shortening their learning time and scope. The university students have big advantage to use their time more efficiently, supported by the university staff and tight learn and exam schedules. On the end having a wise tutor is huge advantage in my opinion.

The answer then is... by Nathan Evans

Surely then the answer then is to hire programmers that are *both* self-taught from a young age *and* university educated? Best of both worlds...

Mitchell Harper seems to only have one side of the story. And comes across as chipped on the shoulder.

The question should also be asked... is web app software engineering with the likes of PHP/Python/Ruby really the real deal? Yes it is software engineering but is is only a minor derivative of it. A derivative that is highly focused, specialised and, for the most part, a well-understood problem domain. That's why certain frameworks describe themselves as being "On Rails"! Explorative and truly innovative software engineering is a whole different game. Something that Mitchell perhaps doesn't even realise exists because he hasn't formally studied the subject area.

Programmers that are ignorant of what they don't know... are very very dangerous. No start-up company should hire them.
Programmers that are concious of what they don't know (yet)... are the best. And will work best in start-ups but can fit in anywhere providing the majority of other developers in the organisation are like-minded.

Bad Advice by James Watson

I know a number of people who dropped out of college or skipped college to enter into the dot-com tech boom. A few have openly expressed regret in this choice and some have gone back to school many years later. There's a big difference between being able to code and understanding the breadth and depth of software engineering and computer science. I find that people who do not have CS degrees are far more likely to be ignorant of other approaches and solutions that are superior to the ones they are familiar with. They are also far less likely to get the big picture and where their work fits into it.

My CS degree did not make me a great programmer. What it gave me is the ability to understand a wide-range of tools, languages, and concepts. A degree is a beginning of your education, not the end.

One anecdote I think is pertinent is a guy I met who works at Lowe's. I mentioned that my father is an engineer and this guy told me his sob story: He was in an engineering program and had a year or so to go. He got an opportunity at a firm and took it, never finishing his degree. Later, he was let go and, despite years of experience, cannot find another job in that field. As I mentioned, he now works as a sales associate at Lowe's (a big-box home improvement store.) He told me that not getting his degree was the worst mistake of his life.

Especially given the economy, I would recommend getting your degree. You'll be far better off when things get going again and school is only going to get more expensive in the coming decades.

I completely agree by Matthias Hryniszak

I'm one of those guys that have to struggle everyday with graduates that have they noses up high with they fancy degrees from universities and such not knowing basic stuff like SOLID principles and elementary design patterns. Sure they can design a compiler (well after a couple of months I can too) and do all sort of useless stuff but what they can't do is learn. Yes, you've read correctly: most (and I'm talking 80% of people I know) have serious issues when it comes to obtaining knowledge about new technologies.

My understanding is that the good old technologies have been done to the death so that the ways of teaching them are already known. But when it comes to the unknown (which is the bigger part of being a software engineer) they just say it's not worth it (oh boy how many times have I heard the statement "we don't do stuff like this" even in regard to object-oriented programming in an object-oriented language like Delphi or Java!)

There is another side to all of it, but before I write it down I need to warn you that if you feel offended by it it is not my intention - it's simply the truth. Well, here it is: nowadays the entry level to become a programmer is so low and the requirements so elementary that even my grandma could do it. The real deal is however that the majority of poor programmers produce code that has to be maintained and causes endless hours of frustration how something so bad could have ever been created. And that in turn shows how low the industry has allowed itself to go only to "do the job". It's horrifying!

To me programming is somewhat of an art mixed with constant knowledge acquisition that's being utilized to fulfill someone else need to do stuff more efficiently (or even at all). But the key here is the art and knowledge - not monkeying around with a keyboard typing like crazy with 20 people you know nothing about producing spaghetti code that's complex like hell only to get the job done. That's a violation of every single principle I stand for and live by. And I personally hate when people do that because at the end of the day I'm the one that has to cleanup the mess created by the so called engineers.

I think the summary of all this could be: I'm not saying don't go and learn at the university and learn. But after that bear in mind that software development is a profession where learning a lot and doing it quick is the key. And most of the time doing it right for a change means having more in less time.

Re: even 8 years later: 100% agreement on what my university has taught me! by Matthias Hryniszak

That's odd - I could tell you exactly the opposite: I rarely see code not written by graduates and for the most part it's just not right what they do (spaghetti code, mixed responsibilities, no tests or test coverage that's just not worth mentioning)... I've seen however a few good specialists that are enthusiast in what they do, never studied computer science (well that's not true - never studied at the university...) and produce things that are of real value in both the style, the mechanics and finally in business value.

What was the problem, again? by Dave Nicolette

This seems to be one of those debates in which everyone is right. It just depends which kind of right interests you.

There's no question that a certain amount of knowledge is necessary to be effective as a software developer. The issue appears to be that not every university provides a particularly good foundation. Some people are able to overcome that handicap on their own through self-study and experience; others aren't. Isn't that a problem with individual institutions, rather than a failing of the educational system as a whole?

Re Dan's blog post (which isn't exactly new):

Two observations. First, this article is on a completely different topic than the InfoQ piece. Dan isn't criticizing the quality of university education in computer science. He's commenting on the overzealous adoption of the term "software craftsmanship" in the absence of a clear definition of its meaning.

Second, I think Dan is incorrect in one of his initial assumptions:

"Software Craftsmanship risks putting the software at the centre rather than the benefit the software is supposed to deliver, mostly because we are romantics with big egos. [...] Non-programmers don’t care about the aesthetics of software in the same way non-plumbers don’t care about the aesthetics of plumbing – they just want their information in the right place or their hot water to work."

Here, he as ascribed motive to unnamed, unknown masses of people: "...because we are romantics with big egos." Really? I wonder.

As a non-plumber, I hope my plumber cares about the aesthetics of plumbing. The goal is to satisfy the need, of course; but the only way to achieve it is to understand the work on a deep level, and to care about doing it right. Prior to our recent bathroom renovation, our showerhead dispensed a weak trickle of water. The craftsman who installed the new shower explained the reason why: Behind the wall, things hadn't been installed quite properly. The pipe would move when water attempted to climb it, and lose pressure. Installed properly, the new shower delivers a powerful, pleasing torrent. I will never know enough about this to install my own shower, but I know that in order to be a "delighted" customer, it was imperative that /someone/ understand this work and care about doing it well.

The notion of software as a craft is not about big egos, and not about elevating the software over its delivered value. Understanding and caring about the details is not the whole picture, but the picture isn't whole without it. If you /don't/ care about the aesthetics of software, you /cannot/ delight your customer with high-quality results. Don't throw out the baby with the bathwater...at least, not in my new bathroom.

When reading this... by Stefan Neumann

it immediately reminded me on a book that was published 1986: Programmers at Work. It consists of interviews with well known developers. One thing from reading it stuck in my mind: Nearly all of those men considered universities NOT to be a good place to learn programming. And I'm still convinced this is true. There are very few situations where you really benefit from this kind of education, for example when starting your own programming language or working in a research and development department. Despite this, it's of course a bad advice not to waste your time in a university, but this is just because of that human-resources-brain-fart that you need a degree to do the companys website. In Germany we have a growing list of million-Euro-IT-projects that turned into epic failures and I'm sure they only hired people with a university degree. Beyond knowledge it's mostly attitude that makes a good programmer and you can't teach that.

Re: When reading this... by James Watson

I think part of the problem with this kind of discussion is that the education that one receives in these program varies wildly. My program had classes where you were required to write actual applications and make them work flawlessly. Literally, if you had one bug in your program and the clock struck 12:01, you lost something like 20% off of your grade. Each day after that you lost another 10% until you were able to submit an application that passed all tests. Too many failed submissions would also cost you. For example, in one class we had to write a system in machine code to accept assembler and then build software in assembler on top of our previous work. In another class we had to build a calendar program from scratch that handled any positive Gregorian date.

While these types of assignments are not representative of what I have done since, I have a fundamental basis that has served me very well in my career. Just understanding time complexity is a crucial piece of being a competent software professional. Many developers lack this knowledge and this leads to many wrongheaded designs and micro-optimizations.

Within my own program, however, many people were able to find a way to avoid such work and, to my estimation, lack any real deep understanding of computer science. It's this lack of consistency that creates this confusion between whether a CS or software engineering program is worthwhile. Somewhat ironically, the idea that CS programs should be some sort of hifalutin programmer training is part of why the degree has lost a lot of it's luster.

Re: even 8 years later: 100% agreement on what my university has taught me! by James Watson

That's odd - I could tell you exactly the opposite: I rarely see code not written by graduates and for the most part it's just not right what they do (spaghetti code, mixed responsibilities, no tests or test coverage that's just not worth mentioning)... I've seen however a few good specialists that are enthusiast in what they do, never studied computer science (well that's not true - never studied at the university...) and produce things that are of real value in both the style, the mechanics and finally in business value.


So is your hypothesis that computer science degrees actually make you worse at programming or simply that there is no correlation between the degree and being good at programming?

Re: even 8 years later: 100% agreement on what my university has taught me! by Some Guy

I'm not the OP, but personally I don't think there's a direct correlation; I do think that someone that is good at programming has the potential to be even better if they have a degree. That is, I think there are a set of traits that make you a good programmer of which the absence of those a degree can't make up; however, the degree + those traits is better than just the traits.... The trick is ultimately recognizing those traits.

Education can build your brain to fight the impossible by Adam Nemeth

It surely does matter, which school you take and with which attitude. I think I did a pretty good school. I think a good school is something which relies on science (the knowledge taught is theoretically found AND is succesful in practice, is universal and mostly stable and timeless, and forms a coherent, complete system) and is practical (lots of project based work, actual coding, using the same technology widespread or on rise at the time, while teaching timeless concepts with them)

Most of the time, education was something I could rely on: I had a waste array of knowledge trained into me, to which I could always go back.

Have schedule problems? What did we learn about that, what were the studies saying?

Don't know how to structure a program? What was this MVC thing again? How were the architectural patterns?

Need to write a parser? What did we learn about Chomsky?

Need the computer to take a wild guess? What were the AI approaches? What's a Bayesian-filter?

It's like having a lot of books on a shelf next to your desk, and you can reach to them on-demand. You can Google them - because you know what term to google.

You can also understand unseen things and bring order to chaos: OK, so, this is a corporate, it must have these functions, otherwise it'd collapse...

Or... this is an operating system... it surely has to manage I/O...

Of course, you should always go back to see the rationales which built up these patterns and theories:
- Was it just an advice? (Like, the Waterfall)
- Was it truly used once? (It wasn't) Was it succesful? (On small projects, under 1000 lines, it is)
- What changed since? Did things really change? (Not always)

Also, sometimes people tell you bullsh.t as part of scientific curricula. That can be because they're scientific theories, never tried out, or because they're the latest fad, and the university wants to be "modern" (4GL, anyone?), they can be because it's the personal mania of the lecturer, or they can be bullshit as it was used out-of-context (waterfall, some people still wait for "final" specs), or they can be supported by marketing.

Yet the completeness, the coherence will be missing if you pick up whatever you need. It won't be a base.

Self-taught people are sometimes too narrow in thinking: they can do a good job only within their own limits, and sometimes, their job is only good compared to themselves, not that to others, as they don't have the ability to compare.

But more important would be, to actually demand this knowledge at the first workplaces: not only demanding them on paper, but always demanding them in practice, so they become habit. Otherwise it won't work.

And then we could never escape the Dark Age of Spaghetti Code.

Education by Bill Pyne

There is no clear cut formula for producing a good developer. Formally trained developers are influenced by the quality of their college programs. Informally trained developers range according to the variety of their experience and access to more senior level people. In order to be great, curiosity has to be a personality trait regardless of how a person is trained.

University programs offer a fantastic environment for learning and experimenting with a low cost of failure: not to mention more time to do each. A student has access to instructors who are at least more experienced than they are. Corporate environments tend to push you for results and discourage experimentation. Processes and divisions of labor are put in place that formally prevent experimentation. If a person has the means to attend a university program, there is little downside other than student loans.

What I'd like to see from universities is a division between computing science and software engineering with the latter being heavily project focused. By project, I mean year long projects each year utilizing data structures, different software development methodologies, team development, different environments, etc. I think this division already exists, from a personality perspective, with some people wanting to build and others wanting to push the boundaries of what can be built. However, universities are currently setup to produce scientists and not builders.

Re: even 8 years later: 100% agreement on what my university has taught me! by James Watson

Works for me. I guess I would only add that if you have those talents, a degree from a good program is worth the time and effort.

The real issue is that too many programs have been dumbed-down in order to increase enrollments and graduation rates.

Re: Education by James Watson

What I'd like to see from universities is a division between computing science and software engineering with the latter being heavily project focused. By project, I mean year long projects each year utilizing data structures, different software development methodologies, team development, different environments, etc. I think this division already exists, from a personality perspective, with some people wanting to build and others wanting to push the boundaries of what can be built. However, universities are currently setup to produce scientists and not builders.


I agree that there should be a split between these two types of programs and have advocated for the same. One limiting factor, I think, is the lack of a body of knowledge that is both widely accepted and timeless. For example, structured programming are often touted as something 'known' to be correct but in reality it's been made obsolete by languages based on it's principles. I think perhaps it is the computer scientists that must lead the creation of a software engineering discipline. Unfortunately, I don't think this is something that they are incented to do.

Re: Education by Adam Nemeth



I agree that there should be a split between these two types of programs and have advocated for the same. One limiting factor, I think, is the lack of a body of knowledge that is both widely accepted and timeless. For example, structured programming are often touted as something 'known' to be correct but in reality it's been made obsolete by languages based on it's principles. I think perhaps it is the computer scientists that must lead the creation of a software engineering discipline. Unfortunately, I don't think this is something that they are incented to do.


That Body of Knowledge does exists, it's called - surprise - Software Engineering Body Of Knowledge (shortened as SWEBOK), and it's an IEEE project. Actually, half of Europe's and US's trainings are based on that, and its extension, the Software Engineering Educational Knowledge (SE2004), or in its old name, "Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering".

In it, a lot of project work is asked for at least 2 relevant domains of choice (usually, it's the recommendation that one domain is chosen by the institute - like, in our case, it was Electrical Engineering - and one is chosen by the student). As an example, one could have a basic training in math and general SE concepts, and could focus on web development techniques and software project management as specialization domains, and could choose a project in health care systems.

As for Structured Programming being obsolete, one should read some literature first, but, to be short: mainstream, current OOP (let's say, java with spring, or .NET) is much closer to SP than Alan Kay's OOP - the latter being more like Scala Actors and such, not that it wouldn't be taught on every university as well.

Re: Education by Bill Pyne

By Structured Programming, were you referring to software development methodologies (e.g. Waterfall, iterative, etc.) or how you structure programs (e.g. OO, top down, etc.) or all of the above?

SE Education Altenatives, please? by Lazar Todorov

Seems that this topic gain an interest.
Let’s put some more fuel in the discussion.

First claim from Mr. Harper is that graduates are not competent, and the second one is self-made developers are the right ones who are able to resolve all software problems more efficiently.

For those who support Mr. Harper point of view, I will advise them to go to the Dentist who learned to drill teeth by self-learning reading the books like "Drilling teeth for Dummies". To not be misunderstandings, let’s choose other professions as a metaphor. For example lawyers. Do you want to have a lawyer that defends you in a divorce process that he had to learn the law by losing hundreds of court processes? Or even better do you want to put your wealth under self-made Asset Manager or Trader? Or maybe you would to fly in an airplane piloted by a pilot with few flying hours in MS Flying Simulator?

It also doesn't mean that graduated ones are automatically better when they are novice, but they should have built a knowledge base to gain an experience and in few years to become Experts.

Let’s look what the brothers Dreyfus taught us in their five stage skills model (en.wikipedia.org/wiki/Dreyfus_model_of_skill_ac...). The path from Novice to the Expert is not instant. It follows several steps: Novice, Advance beginner, Competent, Proficient and then Expert. Question is what kind of level we should expect from the newcomers in the Software industry. Maybe we would prefer the entry level for the newcomers to be at least “Competent”. Then we can set standards that good graduates are when they fall in this category.

The second question is what kind of skills and experience level should be required for a specific job. If we expect that a newcomer could be assigned to a post when Expert skills are required, then normally, they will fail, because they haven't enough experience to do the job. On another side the company and team culture should be supportive for the newcomers to progress in their development. Let's look what how the fresh graduate dentists progress in their careers. With high probability they start working for an experienced dentist doing routine and well known interventions on patients with relatively simple diagnosis. Couched by Experts they slowly gain experience and knowledge to do more complicated interventions alone. This is similar with the pilots. They could fly an Boeing and Airbus when they graduate, but they become a title Captain, after they absolve thousands of flying hours gaining enough experience to command in the pilot cabin, take full responsibility for the safety of their passengers, and in emergency, ditch the plane in the Hudson River (with will of God) without casualties.

The natural process is to assign the novice to the simple tasks and couching them to develop their skills. Instead punishing them for their messy code would be better to set a process where they could learn when they made a failure and how to fix it. They need to learn what to do when they find a messy code; fix the code and inform the creator with an advice what to do next time, for example. If significant deficit in knowledge exist, internal or external workshops could help to transfer the experience from the Experts to the newcomers, for example. The companies and the teams should find proper way how to integrate the newcomers in their environment making productive and satisfied employees from them.

Today even successful artists and musicians need formal education, not just having a talent. Many could play a guitar, but be a real virtuoso you need to learn and practice a lot.

From the supporters would be good to explain how they imagine educating good dentist to drill teeth without to take a proper high medical education? How to fly a Boeing or Airbus without taking an ATPL (Air Transportation Pilot License) level school? How to be a Software Engineer without formal university degree? Some could say that they are different professions and have nothing in common with the Software Engineering, let's they explain why SE is so different that formal education is not required. Many could be happy if someone finds better and innovative approach, especially if it takes less effort, time and money.

Re: Education by Adam Nemeth

I guess he referred the style of programming which came after this book:

www.amazon.com/Structured-Programming-P-I-C-stu...

which reached its height at the end of the 70s, most notably with the work of Wirth:

www.amazon.com/Algorithms-Structures-Prentice-H...

This is the basis of Pascal, ALGOL-60, and C, amongst others.

This approach was criticized by a guy named Alan Kay, amongst others, and was also new compared to functional programming, which was popular through John McCarthy's LISP in the scientific community.

It was attacked a lot when Kay's Smalltalk went into focus in the 80s, at the dawn of graphical user interfaces. Most later technologies, including C++ and Java try to act as a synergy between Structured Programming ideas and Object-Oriented Programming.

It should be noted, however, that the notion of class is already present in the original Structured Programming book. The original Smalltalk didn't have a notion of class, it's a concept introduced only later into that. The most widespread language in use today with the notion of objects, yet without the notion of class is undoubtedly JavaScript.

In the early 2000s, a lot of educational institutes were attacked that they teach based on Pascal, which was always intended as an educational language to teach the concepts of Structured Programming, instead of "modern" languages with more fine-grained OOP elements. Thus, a lot of universities switched to teach solely Java, which became the leading language in enterprises ever since. The abandonment of Pascal in university education correlates with the demise of development based on Delphi, a graphical Pascal environment.

Re: Education by Bill Pyne

Thanks Adam. I read his comment incorrectly. For some reason, my mind went to development methodologies, which are a particular sore point with me - my error. Unfortunately I haven't read Dijkstra's work nor have I read the criticisms so I can't add anything to the discussion of structured programming.

Thanks also for pointing toward the IEEE project. I've been a member of IEEE Computer Society for ~10 years and haven't paid enough attention to it.

Re: Education by James Watson

That Body of Knowledge does exists, it's called - surprise - Software Engineering Body Of Knowledge (shortened as SWEBOK), and it's an IEEE project. Actually, half of Europe's and US's trainings are based on that, and its extension, the Software Engineering Educational Knowledge (SE2004), or in its old name, "Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering".


That's good to know. I wasn't aware. I think that a lot of people are not aware. The term "software engineer" is seen as either hand-waving or misleading by most people in the industry. How do we get from where we are to where software engineer is more than just a job-title?

In it, a lot of project work is asked for at least 2 relevant domains of choice (usually, it's the recommendation that one domain is chosen by the institute - like, in our case, it was Electrical Engineering - and one is chosen by the student). As an example, one could have a basic training in math and general SE concepts, and could focus on web development techniques and software project management as specialization domains, and could choose a project in health care systems.


Are you saying you work for a college or university?

As for Structured Programming being obsolete, one should read some literature first, but, to be short: mainstream, current OOP (let's say, java with spring, or .NET) is much closer to SP than Alan Kay's OOP - the latter being more like Scala Actors and such, not that it wouldn't be taught on every university as well.


That is actually my point. Structured programming is built into languages like Java such that you can't write non-structured programs (more-or-less.) In effect, the languages are structured. Some people are confused by this and think that SP needs to be applied on top of such languages. So when I say they are obsolete, I mean in terms of people needing to actively seek to use them in these modern languages. From a language design perspective, they are not obsolete. Sorry if that wasn't clear.

Re: Education by Adam Nemeth


How do we get from where we are to where software engineer is more than just a job-title?


I guess the only way to do this is to require the body of knowledge from junior developers. That means, when a guy enters his/her first workplace, from day one on, theoretical knowledge is asked back in practice with care. That can mean asking for speed-calculations (O(logn) and friends), asking for diagrams before implementation, asking for code structured in non ad-hoc ways, etc.

Once this is stable at a bunch of leading companies (google, microsoft, you name it), others will embrace this too.

I'd really like SWEBOK or SE 2004 or their successors to be asked back rather than any Certified Scrum Anything programs.


Are you saying you work for a college or university?


No, and I never did. It happened once that I had a lot of junior devs on my hand, which partly comes from my personal style, partly from the situation that my team was doing serious development, yet with dynamic languages (php, javascript) for huge enterprises.

This was for historical reasons (inherited legacy codebase), and we needed people who we can trust they know what they do and why (as we didn't have as many safety nets as static language checkers could provide), yet they are open enough not to write java code in everything.

End result: I hired talented guys to their second or third workplace at most, finishing or freshly finished university, and made sure that I have a core body of knowledge which I can enforce in the first months. That was SWEBOK, and I found out my own alma mater's professors seemingly actually read this when building up their curriculum for software engineers.

As for practice, I was just trying to explain what SE2004 recommends: have a core foundation knowledge, have some branches where the student can choose, and make sure those branches are tried out in real-life, first in simulated, later real project situations. (as an example, we always had to form teams of 3-5 each semester to design and write larger applications, sometimes for problems which the university had at hand that year)


In effect, the languages are structured. Some people are confused by this and think that SP needs to be applied on top of such languages. So when I say they are obsolete, I mean in terms of people needing to actively seek to use them in these modern languages. From a language design perspective, they are not obsolete. Sorry if that wasn't clear


Let me offer you a counter-example. In certain situations, I ask people to structure their code divided into services and entities: services have no internal state of their own, and it's made pretty obvious in their sourcecode where do they get state information from, while entities have no logic at all.

This isn't OOP. We use the class keyword, yet in fact, entities are rather structs, while services are simple code modules. There's nothing OOP-like in that, it's pure SP. Yet it's implemented on "top of" OOP.

This sometimes helps understanding (and therefore, maintainability) better. Sometimes it's not the best approach, but personally I find it hard to find out all the responsibilities of "true" OOP objects sometimes and it's pretty hard to understand the logic which runs through a single use case sometimes, covering 10 or more objects. With SP, the logic is in a single flow, contained within the same module, and not dispersed through the sourcecode tree.

So, I guess SP still has the place on its own.

Re: Education by Adam Nemeth


Thanks Adam. I read his comment incorrectly. For some reason, my mind went to development methodologies, which are a particular sore point with me - my error. Unfortunately I haven't read Dijkstra's work nor have I read the criticisms so I can't add anything to the discussion of structured programming.


What's your problem with teaching of development methodologies? We were told back then, that Waterfall is for code smaller than 1000 lines.

In my time, the leading methodology was RUP. I still say, that for teaching purposes, RUP is better than Agile methodologies, as it's formal, and well-defined. As a body of educational knowledge, it perfectly illustrates iterativeness, parallel activities.

As an example, contrary to the popular belief, in RUP, even specification and implementation run in parallel and with feedback to each other, albeit of course, the original specification for a subcomponent comes always before its implementation - I guess it makes sense...),

It also tells you about what kind of personell you'll need (like, apart from developers, it's good to have domain experts, not just managers; and also testers!.

However, I also hated when they were trying our project groups of 3-4 to work based on RUP on a single semester (we had to implement a simple logistics game in java that year). We weren't practiced in code (and design) enough yet, and the succesful teams were those who wrote the game in a single long weekend based on the specification, then created all the design documents and dumbed-down "prototypes" weekly as required.

We felt it was simply impossible to go forward with plans as we didn't have experience on how it will turn out at the end. We didn't have experience on the consequences. And yet we wanted a good grade of course, so we were afraid what to do, wether we include too much or too few, will it work at the end...

Nowadays I'm a fearless designer, I urge people to be able to think in design, to make working designs, UIs, flows, class hierarchies, without ever writing a single line of code.

But it's hard, and I don't know yet how to teach this. I wish I would.

Re: Education by W Watson

Education/degrees are a signal: see en.wikipedia.org/wiki/Michael_Spence and en.wikipedia.org/wiki/Signaling_(economics)

Don't confuse a degree with the ability to do (or lack of ability to do) work. It is a symbol, not the referent.

Compare a CS degree and no public footprint whatsoever other than a resume, vs someone with no degree but
founder or major contributor to a high profile open source project (maybe in a field related to what you are looking for)

The latter wins, every time. There are more signals then just degrees.

Re: Education by Adam Nemeth


Don't confuse a degree with the ability to do (or lack of ability to do) work. It is a symbol, not the referent.


A degree done well not only signals the ability, it's also a signal of balanced knowledge: wether we like it or not, on a more serious university (MIT, UCB, or to have European examples, TUWIEN or BUTE), a degree is a written proof that the candidate passed all the tests sooner or later, hence it proved (if we trust the education system) that some basic understanding of multiple fields of our profession is there.

The emphasis is on balanced: most non-degree developers have no clue how much they don't know anything about: even with the same level of knowledge, the main difference of one with a good university degree and a self-taught man is that the former knows what he doesn't know.

That's an ability that's more important than experience in any hard situations.


The latter wins, every time. There are more signals then just degrees.


I hope not.

Open Source contributions are a good example, although I prefer to let the candidate send his favourite code written by himself, or write a little test.

It happened not once, that I opened a code the candidate has made, and he failed the interview as a direct consequence.

Unfortunately, a lot of companies aren't opening the code. I could also brag that I worked for X Y famous companies (I did), or projects, but I prefer not to, as it means even less than a degree.

But a single bunch of code (1000-2000 lines) doesn't tell anything about a candidate, nor the pure existence of a degree. One has to know how to probe into the knowledge of the candidate in order to understand his abilities. That's why interviewing for development is an art in itself.

Re: Education by Bill Pyne

I have no problem with teaching development methodology and didn't mean to imply otherwise. I have a problem with treating Waterfall as a Holy Grail. You have to pick a methodology according to the complexity of the application. What I meant by my comment was that different methodologies should be taught and USED in a software engineering program.

Re: Education by Chris Webster

Steve McConnell talked about the difference between software engineers and computer scientists in 2004:

www.stevemcconnell.com/psd/04-senotcs.htm

My own experience (as a non-CS graduate with >20 years in software development) is that there is no obvious correlation between real-world software development skills and the possession of a degree in computer science. Some CS graduates are very smart and I've learned a lot from them. Others are incapable of breaking out of the narrow academic mindset and produce poorly written code that might be very impressive in its complexity as an academic exercise, but is unmaintainable in any commercial environment.

Another massive gap in university degrees is that as far as I can tell nobody learns anything much about databases or relational data-modelling on an industrial scale (maybe a few weeks at most), yet a huge proportion of commercial business systems are built on top of RDBMS technology. You only have to browse the Java bulletin boards to see the scale of the problems experienced by recent graduates encountering serious DB systems for the first time.

Some businesses need specialist computer scientists e.g. Google or Microsoft, but most of the job opportunities in IT are in real-world commercial software development, and university degrees still fail to prepare graduates for working in most such areas of the IT industry.

Re: Education by W Watson

A degree done well not only signals the ability, it's also a signal of balanced knowledge:

This is speculation, at best. I'd suggest looking at the links. The guy got the Nobel prize for answering this question.


I hope not.

Open Source contributions are a good example, although I prefer to let the candidate send his favourite code written by himself, or write a little test.


Let's get specific in order to make what you are saying more clear.

If you wanted unix programming, would you turn someone with this background down: en.wikipedia.org/wiki/Brian_Fox_(computer_programmer)

Do you care where his degree is from? He doesn't even list it, if he has one.

Seriously ask yourself ... is it more costly for a non-programmer to get a cs degree, or do what someone like Brian Fox has done?

And you are saying you would ask for a sample of code from this guy? You would get laughed at.

Re: Education by Adam Nemeth

This is speculation, at best. I'd suggest looking at the links. The guy got the Nobel prize for answering this question.


I looked at the links already. The guy got a Nobel Memorial Prize in Economics, he didn't get a Nobel Prize. Hence what he writes about is a trend. I guess you can read his writings too: the biggest difference in economics and other nobel-prized sciences is that economics thesis can be read as a layman, while the other scientific researches can not.

That's also a problem, as if someone didn't study economics (after a while, I did drop out of economics and concentrated solely on SE, despite staying as a research fellow in the social studies department for years), he can understand what he wants to.

Spencer never ever said, that degrees don't have a value put behind them. He only argued, that on a macro scale, even if the education wouldn't have any correlation with knowledge, companies would still prefer educated people, as they have at least something proven. This is easiliy seen in the administration market, where having a degree or not having one doesn't really correlate with your knowledge about excel and word.

What I said, that on a specific situation, knowing your country's own institute's curricula, it's not about the price (in most of East-Europe, higher educaion is free for the country's citizens, they only have to prove with grades and application exams), it's about how many tests should have been passed already.


Let's get specific in order to make what you are saying more clear.

If you wanted unix programming, would you turn someone with this background down: en.wikipedia.org/wiki/Brian_Fox_(computer_programmer)

Do you care where his degree is from? He doesn't even list it, if he has one.

Seriously ask yourself ... is it more costly for a non-programmer to get a cs degree, or do what someone like Brian Fox has done?

And you are saying you would ask for a sample of code from this guy? You would get laughed at.


If I had Brian Fox's CV at my hand, I'd definitely open up bash's sourcecode and version control history. Just like if someone is coming with an education degree, I look up how exams look like in that university, and what was the curriculum for the given study.

And exactly this is the point where the signaling theory fades: you'd hire someone based on a signal (he's the author of bash), even if bash would be a disaster waiting to happen, or he'd be in fact a manager of the code instead of a real contributor.

That doesn't really differ from hiring somebody based on a university certificate.

But if you do open the sourcecode, and you do open the curriculum and the actual exam system, you aren't on the field of signaling theory anymore: you get real data, instead of signals.

Re: Education by W Watson

That doesn't really differ from hiring somebody based on a university certificate.


So to be clear, you are saying that a university degree is as good a signal for unix programming as having written bash, GNU Bash, GNU Makeinfo, GNU Info, GNU Finger, and readline? This is just a simple yes or no question.

Re: Education by Adam Nemeth

No.

Is a bunch of spaghetti which happens to work, but God knows why a good signal of UNIX programming?*

(* I'm not claiming bash is one, but my list of rotten-inside open source tools grows day-by-day)

And: in general, if you need a guns for hire for non-specific development purposes (like, simply you're a development firm, without clear focus), is a good graded degree, done in time at a f.ing hard university a good signal?

Re: Education by James Watson

Let me offer you a counter-example. In certain situations, I ask people to structure their code divided into services and entities: services have no internal state of their own, and it's made pretty obvious in their sourcecode where do they get state information from, while entities have no logic at all.

This isn't OOP. We use the class keyword, yet in fact, entities are rather structs, while services are simple code modules. There's nothing OOP-like in that, it's pure SP. Yet it's implemented on "top of" OOP.

This sometimes helps understanding (and therefore, maintainability) better. Sometimes it's not the best approach, but personally I find it hard to find out all the responsibilities of "true" OOP objects sometimes and it's pretty hard to understand the logic which runs through a single use case sometimes, covering 10 or more objects. With SP, the logic is in a single flow, contained within the same module, and not dispersed through the sourcecode tree.

So, I guess SP still has the place on its own.


Late reply but I think we are talking about different things. I'm not dogmatic about OO or any other approach.

What I mean is that people still advocate things like having only one return statement at the end of the method even if it makes the method harder to understand. Often this is the case and forcing a single return can limit the compiler's ability to catch errors like when not all paths return a value. Other people claim that various language features are 'gotos' (e.g. exceptions, breaks) and therefore violate structured programming principles. This is really nonsensical because these rules were developed for working in COBOL where language features are thin and superficial and limits on inane approaches are few.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

38 Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT