SlideShare a Scribd company logo
1 of 50
Download to read offline
From programming
to software engineering:

     Notes of an
  accidental teacher

         Bertrand Meyer
     ETH Zurich & Eiffel Software
                                    Chair of
                                    Software Engineering
About these slides

This is the slide set for my Education Keynote at ICSE
(International Conference on Software Engineering), Cape
Town, South Africa, 5 May 2010.

Usual caveats apply: this is only supporting material, not all
of it understandable independently of the talk. Many of
the original slides (in particular the programming-related
examples) include animation, not visible in this version.

URLs are clickable and have associated screen tips.




                                                                 2
“Accidental”*




                *Post-talk note: slide removed
                                                 3
Thanks to…

Michela Pedroni, Manuel Oriol, Martin Nordio, Peter Kolb,
Till Bay, Roman Mitin, Karine Arnout and many others




                                                            4
Content

1. Definitions: programming and software engineering

2. Lessons from experience: teaching programming

3. Lessons from experience: teaching software engineering

4. General lessons




                                                            5
Teaching programming: concepts or skills?




                                            6
Quiz

Your boss gives you the source code of a C compiler and
asks you to adapt it so that it will also find out if the
program being compiled will not run forever (i.e. it will
terminate its execution).

1.     Yes, I can, it’s straightforward

2.      It’s hard, but doable

3.      It is not feasible for C, but is feasible for Java

4.      It cannot be done for any realistic programming
         language
                                                              7
Teaching programming: concepts or skills?




        Skills supporting
            concepts


                                            8
Teaching programming: some critical concepts
Specification vs implementation,
information hiding, abstraction                   Notation

Change                         Syntax vs validity vs semantics

               Recursive reasoning
Structure

              Classification        Complexity & impossibility
 Reuse
                       Algorithmic reasoning
Function vs data
                                  Typing
               Scaling up

 Complexity     Static vs dynamic            Invariant
                                                                 9
Software engineering definitions

SWEBOK, Wikipedia:
Software engineering is the application of a systematic,
disciplined, quantifiable approach to the development,
operation, and maintenance of software, and the study of
these approaches; that is, the application of engineering to
software.

The application of engineering to software.



 Parnas (cited in Ghezzi, Jazayeri, Mandrioli): “The multi-
 person construction of multiversion software”

                       *Post-talk note: the discussion explained why
                       this definition is unsatisfactory.
                                                                       10
Teaching software engineering
“DIAMON”:
   Description: specify (requirements, systems,
    designs,implementations...) and document
   Implementation: build the products (includes both
    programming & design)
   Assessment: verify, validate, analyze, test, measure
    (both products and processes)
   Management: organize the work, communicate,
    collaborate
   Operation: deploy systems and oversee their proper
    functioning
   Notation: devise and apply appropriate formalisms

                                                           11
Notation
The natural path




       Implementation
                   Description
                   Assessment
                     Management
                      Operation
                                  12
1. Definitions: programming and software engineering

2. Lessons from experience: teaching programming

3. Lessons from experience: teaching software
   engineering

4. General lessons




                                                       13
Introductory programming teaching

Teaching first-year programming is a politically sensitive
area, as you must contend not only with your students but
also with an intimidating second audience — colleagues who
teach in subsequent semesters….
Academics who teach introductory programming are placed
under enormous pressure by colleagues.
As surely as farmers complain about the weather,
computing academics will complain about students’
programming abilities.


     Raymond Lister: After the Gold Rush: Toward
     Sustainable Scholarship in Computing,
     10th Conf. on Australasian computing education, 2008
                                                             14
Some challenges in teaching programming

  Ups   and downs of high-tech economy, image of CS

  Offshoring   and globalization raise the stakes

  Short-term   pressures (e.g. families), IT industry fads

  Widely   diverse student motivations, skills, experience




                                                              15
The Facebook generation: 1st-year CS students
 Computer experience                          Programming experience
                2-4 yrs: 4%




                     5-9 yrs: 42%
   ≥10 yrs: 54%




For year-by-year figures & analysis: see Pedroni, Meyer,
Oriol, What do beginning CS majors know?, 2009,
                                                         Averages, 2003-2008
se.ethz.ch/~meyer/publications/teaching/background.pdf
                                                         (yearly variations small)

                                                                                16
Ways to teach introductory programming

      1. “Programming in the small”

      2. Learn APIs

      3. Teach a programming language: Java, C++, C#

      4. Functional programming

      5. Completely formal, don’t touch a computer




   Our approach: Outside-In (inverted curriculum)
                                                        17
Concepts or skills?




      Skills supporting
              concepts


                          18
Teaching programming: some critical concepts
Specification vs implementation,
information hiding, abstraction                   Notation

Change                         Syntax vs validity vs semantics

               Recursive reasoning
Structure

              Classification        Complexity & impossibility
 Reuse
                       Algorithmic reasoning
Function vs data
                                  Typing
               Scaling up

 Complexity     Static vs dynamic            Invariant
                                                                 19
Invariants: loops as problem-solving strategy

A loop invariant is a property that:

    Is easy to establish initially
            (even to cover a trivial part of the data)

    Is easy to extend to cover a bigger part

    If covering all data, gives the desired result!




                                                         20
Computing the maximum of a list



    from
           ???
    invariant
           ???
    across structure as i loop
                                  .
           Result := max (Result, i item)
    end


                                            21
Loop as approximation strategy




     s1          s2                           si                  sn




                             .. s 1)
                                       Loop body:
 Result = a 1   = Max (s 1                 i := i + 1
     Result = Max (s 1   .. s 2)            Result := max (Result , s i )

                      Result = Max (s 1   .. s i )
  The loop                                Result = Max (s 1   .. s n )
  invariant
                                                                            22
Reversing a list


         1            2           3              4            5




                                                               right

  i   first_element       pivot       from
                                           pivot := first_element
                                           first_element := Void
                                      until pivot = Void loop
                                           i := first_element
                                           first_element := pivot
                                           pivot := pivot.right
                                           first_element.put_right (i )
                                      end
                                                                       23
Reversing a list


         1            2           3              4            5




                                                               right

  i   first_element       pivot       from
                                           pivot := first_element
                                           first_element := Void
                                      until pivot = Void loop
                                           i := first_element
                                           first_element := pivot
                                           pivot := pivot.right
                                           first_element.put_right (i )
                                      end
                                                                       24
Reversing a list


         1            2           3              4            5




                                                               right

  i   first_element       pivot       from
                                           pivot := first_element
                                           first_element := Void
                                      until pivot = Void loop
                                           i := first_element
                                           first_element := pivot
                                           pivot := pivot.right
                                           first_element.put_right (i )
                                      end
                                                                       25
Reversing a list


         1            2           3              4            5




                                                               right

  i   first_element       pivot       from
                                           pivot := first_element
                                           first_element := Void
                                      until pivot = Void loop
                                           i := first_element
                                           first_element := pivot
                                           pivot := pivot.right
                                           first_element.put_right (i )
                                      end
                                                                       26
Reversing a list


         1            2           3              4            5




                                                               right

  i   first_element       pivot       from
                                           pivot := first_element
                                           first_element := Void
                                      until pivot = Void loop
                                           i := first_element
                                           first_element := pivot
                                           pivot := pivot.right
                                           first_element.put_right (i )
                                      end
                                                                       27
Why does it work?


          1           2           3              4            5




                                                               right

  i   first_element       pivot       from
                                           pivot := first_element
                                           first_element := Void
                                      until pivot = Void loop
Invariant: from first_element              i := first_element
following right, initial items
in inverse order; from pivot,              first_element := pivot
rest of items in original order            pivot := pivot.right
                                           first_element.put_right (i )
                                      end
                                                                       28
Levenshtein distance

 “Beethoven” to “Beatles”


            B E      E T H O V E                N



                    A               L           S
Operation            R          D   R   D       R

Distance    0   0    1      1   2   3   4   4   5
                                                    29
B   E   A       T   L   E   S
        0   1   2   3       4   5   6   7

    0   0   1   2   3       4   5   6   7


B   1   1   0   1   2       3   4   5   6


E   2   2   1   0   1       2   3   4   5


E   3   3   2   1   1       2   3   3   4


T   4   4   3   2   2       1   2   3   4


H   5   5   4   3   3       2   2   3   4


                        D
Levenshtein algorithm
               ..
across r : 1 | | rows as i loop
                    ..
   across c : 1 | | columns as j invariant
       -- For all p : 1 .. i, q : 1 .. j –1, we can turn source [1 .. p ]
       ???
       -- into target [1 .. q ] in D [p, q ] operations

   loop
      if source [i ] = target [ j ] then
          D [i, j ] := D [ i -1, j -1]
      else
         D [i, j ] := 1 +
                      min (D [i -1, j ], D [i , j - 1], D [i - 1, j - 1])
      end
   end
end
Result := D [rows, columns]
                                                                            31
B   E       A   T       L    E      S
        0   1   2       3   4      5     6      7

    0   0   1   2       3   4      5     6      7
                  Invariant: each D [i, j ]
                  is distance from
B   1   1   0   1 source [1..i ] to target [1..j ]
                      2     3     4    5      6


E   2   2   1   0       1   2      3     4       5


E   3   3   2   1       1   2      3     3       4

                              RD
T   4   4   3   2       2   1  I 2

H   5


                    I            D           R
                Insert          Delete       Replace
Concepts or skills?




      Skills supporting
              concepts


                          33
Outside-in (Inverted Curriculum): intro course

Fully object-oriented from the start, using Eiffel
Design by Contract principles from the start

Component based: students use existing software
(TRAFFIC library):
  They start out as consumers      Michela Pedroni &
                                   numerous students
  They end up as producers!
                                ≈ 150,000 lines of Eiffel

“Progressive opening of the black boxes”

TRAFFIC is graphical, multimedia and extendible


                                                            34
(Approach 3: teaching a specific language)

First Java program:


class First {
      public static void main(String args[])
      { System.out.println("Hello World!"); } }



  You’ll understand                Do as I say,
  when you grow up!                not as I do


                                                  35
Our first “program”



class PREVIEW inherit
  TOURISM
feature
  explore
            -- Prepare & animate route
      do
            Paris.display
            Louvre.spotlight
            Metro.highlight
            Route1.animate
      end                                Text to input
end
                                                         36
37
Supporting textbook

touch.ethz.ch




Springer, 2009
                      38
Principles of the ETH course

   Reuse software : inspiration, imitation,
    abstraction
   See lots of software
   Learn to reuse through interfaces and
    contracts
   Interesting examples from day one
   Combination of principles and practices
                                               touch.ethz.ch
Traditional topics too: algorithms, control structures,
basic data structures, recursion, syntax & BNF, …

Advanced topics: closures & lambda-calculus, some design
patterns, intro to software engineering…
                                                               39
1. Definitions: programming and software engineering

2. Lessons from experience: teaching programming

3. Lessons from experience: teaching software engineering

4. General lessons




                                                            40
Teaching software engineering

Basic courses:
 Software engineering (3rd year)
 Software architecture (2nd year)




Advanced courses:
 Distributed & outsourced software engineering (DOSE)
 Software verification
 (etc.)




                                                         41
Some principles for SE/SA courses

Basic goal: cover what a good programming
student does not know about SE
                                                  Description
Do not attempt a catalog                         Implementation
 Do teach key industry practices (e.g. UML)      Assessment
                                                   Management
 Emphasize non-”I” & non-”N”parts             
                                                  Operation
 SE is not SA
                                                  Notation
 A university is not a company
 Emphasize falsifiable knowledge
 Include a project (see next)




                                                               42
Principles for SE course projects

   Include implementation
   Students implement what they specify
   Swap development & testing
   Manage collaboration
   Spell out project’s pedagogical goals
   Choose which industry characteristics to include & not




                                                             43
The object-oriental bazaar




                             44
One thing I would like to know…

Designing good non-multiple-choice exam questions for SE
Example from a medical textbook*:
Case History B
A woman (24 years of age; height: 1.70 m; weight: 60 kg) is in hospital due to a
tremendous thirst, and she drinks large amounts of water. Since she is
producing 10 or more litres of urine each day, the doctors suspect the diagnosis
to be diabetes insipidus. The vasopressin concentration in plasma (measured by
a RIA method) is 10 fmol per l. […] The extracellular volume (ECV) is 20% of
her body weight. […]
 1. Calculate the secretion of vasopressin (in mg/hour) from the
neurohypophysis of a normal 60-kg person and of this patient […]
 4. Estimate the relation between this concentration and that of a healthy
individual.
 5. Does this ratio have implications for the interpretation of her special type
of diabetes insipidus?
6. Is it dangerous to lose 10 litres of urine per day?

                               *www.mfi.ku.dk/ppaulev/chapter26/Chapter%2026.htm
                                                                               45
Distributed software engineering

Today’s software development is multipolar
University seldom teach this part!

“Software Engineering for Outsourced and Offshore
Development” since 2003, with Peter Kolb

Since 2007: Distributed & Outsourced Software
Engineering (DOSE)

The project too is distributed. Currently: ETH, Politecnico di
Milano, U. of Nijny Novgorod, Odessa Polytechnic, U.
Debrecen, Hanoi University of Technology


                                                             46
The DOSE project

Setup: each group is a collection of teams from different
university; usually 2 teams, sometimes 3

Division by functionality, not lifecycle
Results:
     Hard for students
     Initial reactions often negative
     In the end it works out
     The main lesson: interfaces & abstraction


Open to more institutions (mid-Sept to mid-Dec 2010):
               http://se.ethz.ch/dose

                                                            47
1. Definitions: programming and software engineering

2. Lessons from experience: teaching programming

3. Lessons from experience: teaching software engineering

4. Lessons: general




                                                            48
Hindering SE teaching & research

(More on these issues on my blog, bertrandmeyer.com)

1. No systematic postmortem on software disasters
      such as:
             Ariane 5
                  (Lions/Kahn, see Jézéquel & Meyer)
             Tokyo Stock Exchange
                  (Tetsuo Tamai, Social Impact of
                  Information System Failures,
                  IEEE Computer, June 09)
2. Difficulty of funding programmer positions

3. Need better empirical software engineering

                                                       49
General lessons learned
1.   Whatever we teach should be falsifiable
2.   Let us not lower our intellectual guards
3.   Tools and languages matter
4.   Teach skills supporting concepts
5.   Technology is key
6.   Programming is at the center of software engineering
7.   We are still at the beginning, but should be proud
                    se.ethz.ch (chair)
              touch.ethz.ch (intro textbook)
           se.ethz.ch/dose (distributed course)
                bertrandmeyer.com (blog)
                                                  Chair of

              eiffel.com (languages & tools)      Software Engineering


                                                                         50

More Related Content

What's hot

Pre trained language model
Pre trained language modelPre trained language model
Pre trained language modelJiWenKim
 
BERT: Bidirectional Encoder Representations from Transformers
BERT: Bidirectional Encoder Representations from TransformersBERT: Bidirectional Encoder Representations from Transformers
BERT: Bidirectional Encoder Representations from TransformersLiangqun Lu
 
1909 BERT: why-and-how (CODE SEMINAR)
1909 BERT: why-and-how (CODE SEMINAR)1909 BERT: why-and-how (CODE SEMINAR)
1909 BERT: why-and-how (CODE SEMINAR)WarNik Chow
 
Programming In C++
Programming In C++ Programming In C++
Programming In C++ shammi mehra
 
Short course fuzzy logic applications
Short course fuzzy logic applicationsShort course fuzzy logic applications
Short course fuzzy logic applicationsDalia Baziuke
 
GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...
GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...
GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...Albert Orriols-Puig
 
MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...
MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...
MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...Sunkyung Lee
 
OCR G325 Mark Scheme Jan 2012
OCR G325 Mark Scheme Jan 2012OCR G325 Mark Scheme Jan 2012
OCR G325 Mark Scheme Jan 2012aquinasmedia
 
Pal gov.tutorial1.session3 2.mandatoryrules
Pal gov.tutorial1.session3 2.mandatoryrulesPal gov.tutorial1.session3 2.mandatoryrules
Pal gov.tutorial1.session3 2.mandatoryrulesMustafa Jarrar
 
Close Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet codeClose Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet codelbergmans
 
Aae oop xp_01
Aae oop xp_01Aae oop xp_01
Aae oop xp_01Niit Care
 
Aae oop xp_02
Aae oop xp_02Aae oop xp_02
Aae oop xp_02Niit Care
 
HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...
HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...
HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...Albert Orriols-Puig
 
352735327 rsh-qam11-tif-04-doc
352735327 rsh-qam11-tif-04-doc352735327 rsh-qam11-tif-04-doc
352735327 rsh-qam11-tif-04-docFiras Husseini
 

What's hot (20)

Pre trained language model
Pre trained language modelPre trained language model
Pre trained language model
 
BERT: Bidirectional Encoder Representations from Transformers
BERT: Bidirectional Encoder Representations from TransformersBERT: Bidirectional Encoder Representations from Transformers
BERT: Bidirectional Encoder Representations from Transformers
 
[Paper review] BERT
[Paper review] BERT[Paper review] BERT
[Paper review] BERT
 
1909 BERT: why-and-how (CODE SEMINAR)
1909 BERT: why-and-how (CODE SEMINAR)1909 BERT: why-and-how (CODE SEMINAR)
1909 BERT: why-and-how (CODE SEMINAR)
 
Programming In C++
Programming In C++ Programming In C++
Programming In C++
 
Short course fuzzy logic applications
Short course fuzzy logic applicationsShort course fuzzy logic applications
Short course fuzzy logic applications
 
GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...
GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...
GECCO'2007: Modeling XCS in Class Imbalances: Population Size and Parameter S...
 
MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...
MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...
MelBERT: Metaphor Detection via Contextualized Late Interaction using Metapho...
 
Lecture12 - SVM
Lecture12 - SVMLecture12 - SVM
Lecture12 - SVM
 
CS8592-OOAD Lecture Notes Unit-4
CS8592-OOAD Lecture Notes Unit-4CS8592-OOAD Lecture Notes Unit-4
CS8592-OOAD Lecture Notes Unit-4
 
OCR G325 Mark Scheme Jan 2012
OCR G325 Mark Scheme Jan 2012OCR G325 Mark Scheme Jan 2012
OCR G325 Mark Scheme Jan 2012
 
Lecture05
Lecture05Lecture05
Lecture05
 
Pal gov.tutorial1.session3 2.mandatoryrules
Pal gov.tutorial1.session3 2.mandatoryrulesPal gov.tutorial1.session3 2.mandatoryrules
Pal gov.tutorial1.session3 2.mandatoryrules
 
Close Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet codeClose Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet code
 
Aae oop xp_01
Aae oop xp_01Aae oop xp_01
Aae oop xp_01
 
Aae oop xp_02
Aae oop xp_02Aae oop xp_02
Aae oop xp_02
 
DISMATH_Intro_Admin
DISMATH_Intro_AdminDISMATH_Intro_Admin
DISMATH_Intro_Admin
 
HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...
HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...
HIS'2008: Genetic-based Synthetic Data Sets for the Analysis of Classifiers B...
 
LBYEC72_Overview
LBYEC72_OverviewLBYEC72_Overview
LBYEC72_Overview
 
352735327 rsh-qam11-tif-04-doc
352735327 rsh-qam11-tif-04-doc352735327 rsh-qam11-tif-04-doc
352735327 rsh-qam11-tif-04-doc
 

Similar to From programming to software engineering: ICSE keynote slides available

Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Ovidiu Farauanu
 
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...Make Mannan
 
Course Breakup Plan- C
Course Breakup Plan- CCourse Breakup Plan- C
Course Breakup Plan- Cswatisinghal
 
CS8592 Object Oriented Analysis & Design - UNIT IV
CS8592 Object Oriented Analysis & Design - UNIT IV CS8592 Object Oriented Analysis & Design - UNIT IV
CS8592 Object Oriented Analysis & Design - UNIT IV pkaviya
 
Matlab for a computational PhD
Matlab for a computational PhDMatlab for a computational PhD
Matlab for a computational PhDAlbanLevy
 
00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introduction00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introductionmaznabili
 
SE2018_Lec 18_ Design Principles and Design Patterns
SE2018_Lec 18_ Design Principles and Design PatternsSE2018_Lec 18_ Design Principles and Design Patterns
SE2018_Lec 18_ Design Principles and Design PatternsAmr E. Mohamed
 
18CSS101J PROGRAMMING FOR PROBLEM SOLVING
18CSS101J PROGRAMMING FOR PROBLEM SOLVING18CSS101J PROGRAMMING FOR PROBLEM SOLVING
18CSS101J PROGRAMMING FOR PROBLEM SOLVINGGOWSIKRAJAP
 
Data structures using C
Data structures using CData structures using C
Data structures using CPdr Patnaik
 
Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02Salman Qamar
 
Se chapter 1,2,3 2 mark qa
Se chapter 1,2,3   2 mark  qaSe chapter 1,2,3   2 mark  qa
Se chapter 1,2,3 2 mark qaAruna M
 
Lab 5 array
Lab 5 arrayLab 5 array
Lab 5 arraymkazree
 
CPP_,module2_1.pptx
CPP_,module2_1.pptxCPP_,module2_1.pptx
CPP_,module2_1.pptxAbhilashTom4
 

Similar to From programming to software engineering: ICSE keynote slides available (20)

Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
 
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
 
Course Breakup Plan- C
Course Breakup Plan- CCourse Breakup Plan- C
Course Breakup Plan- C
 
CS8592 Object Oriented Analysis & Design - UNIT IV
CS8592 Object Oriented Analysis & Design - UNIT IV CS8592 Object Oriented Analysis & Design - UNIT IV
CS8592 Object Oriented Analysis & Design - UNIT IV
 
Recursion Pattern Analysis and Feedback
Recursion Pattern Analysis and FeedbackRecursion Pattern Analysis and Feedback
Recursion Pattern Analysis and Feedback
 
EEDC Programming Models
EEDC Programming ModelsEEDC Programming Models
EEDC Programming Models
 
Lec 1 25_jul13
Lec 1 25_jul13Lec 1 25_jul13
Lec 1 25_jul13
 
Matlab for a computational PhD
Matlab for a computational PhDMatlab for a computational PhD
Matlab for a computational PhD
 
00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introduction00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introduction
 
1 puc programming using c++
1 puc programming using c++1 puc programming using c++
1 puc programming using c++
 
SE2018_Lec 18_ Design Principles and Design Patterns
SE2018_Lec 18_ Design Principles and Design PatternsSE2018_Lec 18_ Design Principles and Design Patterns
SE2018_Lec 18_ Design Principles and Design Patterns
 
Lecture 1.pptx
Lecture 1.pptxLecture 1.pptx
Lecture 1.pptx
 
18CSS101J PROGRAMMING FOR PROBLEM SOLVING
18CSS101J PROGRAMMING FOR PROBLEM SOLVING18CSS101J PROGRAMMING FOR PROBLEM SOLVING
18CSS101J PROGRAMMING FOR PROBLEM SOLVING
 
Data structures using C
Data structures using CData structures using C
Data structures using C
 
Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02
 
Se chapter 1,2,3 2 mark qa
Se chapter 1,2,3   2 mark  qaSe chapter 1,2,3   2 mark  qa
Se chapter 1,2,3 2 mark qa
 
21AI401 AI Unit 1.pdf
21AI401 AI Unit 1.pdf21AI401 AI Unit 1.pdf
21AI401 AI Unit 1.pdf
 
Lab 5 array
Lab 5 arrayLab 5 array
Lab 5 array
 
CPP_,module2_1.pptx
CPP_,module2_1.pptxCPP_,module2_1.pptx
CPP_,module2_1.pptx
 
FIDP_GenMath.docx
FIDP_GenMath.docxFIDP_GenMath.docx
FIDP_GenMath.docx
 

Recently uploaded

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 

Recently uploaded (20)

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

From programming to software engineering: ICSE keynote slides available

  • 1. From programming to software engineering: Notes of an accidental teacher Bertrand Meyer ETH Zurich & Eiffel Software Chair of Software Engineering
  • 2. About these slides This is the slide set for my Education Keynote at ICSE (International Conference on Software Engineering), Cape Town, South Africa, 5 May 2010. Usual caveats apply: this is only supporting material, not all of it understandable independently of the talk. Many of the original slides (in particular the programming-related examples) include animation, not visible in this version. URLs are clickable and have associated screen tips. 2
  • 3. “Accidental”* *Post-talk note: slide removed 3
  • 4. Thanks to… Michela Pedroni, Manuel Oriol, Martin Nordio, Peter Kolb, Till Bay, Roman Mitin, Karine Arnout and many others 4
  • 5. Content 1. Definitions: programming and software engineering 2. Lessons from experience: teaching programming 3. Lessons from experience: teaching software engineering 4. General lessons 5
  • 7. Quiz Your boss gives you the source code of a C compiler and asks you to adapt it so that it will also find out if the program being compiled will not run forever (i.e. it will terminate its execution). 1.  Yes, I can, it’s straightforward 2.  It’s hard, but doable 3.  It is not feasible for C, but is feasible for Java 4.  It cannot be done for any realistic programming language 7
  • 8. Teaching programming: concepts or skills? Skills supporting concepts 8
  • 9. Teaching programming: some critical concepts Specification vs implementation, information hiding, abstraction Notation Change Syntax vs validity vs semantics Recursive reasoning Structure Classification Complexity & impossibility Reuse Algorithmic reasoning Function vs data Typing Scaling up Complexity Static vs dynamic Invariant 9
  • 10. Software engineering definitions SWEBOK, Wikipedia: Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software. The application of engineering to software. Parnas (cited in Ghezzi, Jazayeri, Mandrioli): “The multi- person construction of multiversion software” *Post-talk note: the discussion explained why this definition is unsatisfactory. 10
  • 11. Teaching software engineering “DIAMON”:  Description: specify (requirements, systems, designs,implementations...) and document  Implementation: build the products (includes both programming & design)  Assessment: verify, validate, analyze, test, measure (both products and processes)  Management: organize the work, communicate, collaborate  Operation: deploy systems and oversee their proper functioning  Notation: devise and apply appropriate formalisms 11
  • 12. Notation The natural path Implementation Description Assessment Management Operation 12
  • 13. 1. Definitions: programming and software engineering 2. Lessons from experience: teaching programming 3. Lessons from experience: teaching software engineering 4. General lessons 13
  • 14. Introductory programming teaching Teaching first-year programming is a politically sensitive area, as you must contend not only with your students but also with an intimidating second audience — colleagues who teach in subsequent semesters…. Academics who teach introductory programming are placed under enormous pressure by colleagues. As surely as farmers complain about the weather, computing academics will complain about students’ programming abilities. Raymond Lister: After the Gold Rush: Toward Sustainable Scholarship in Computing, 10th Conf. on Australasian computing education, 2008 14
  • 15. Some challenges in teaching programming  Ups and downs of high-tech economy, image of CS  Offshoring and globalization raise the stakes  Short-term pressures (e.g. families), IT industry fads  Widely diverse student motivations, skills, experience 15
  • 16. The Facebook generation: 1st-year CS students Computer experience Programming experience 2-4 yrs: 4% 5-9 yrs: 42% ≥10 yrs: 54% For year-by-year figures & analysis: see Pedroni, Meyer, Oriol, What do beginning CS majors know?, 2009, Averages, 2003-2008 se.ethz.ch/~meyer/publications/teaching/background.pdf (yearly variations small) 16
  • 17. Ways to teach introductory programming  1. “Programming in the small”  2. Learn APIs  3. Teach a programming language: Java, C++, C#  4. Functional programming  5. Completely formal, don’t touch a computer Our approach: Outside-In (inverted curriculum) 17
  • 18. Concepts or skills? Skills supporting concepts 18
  • 19. Teaching programming: some critical concepts Specification vs implementation, information hiding, abstraction Notation Change Syntax vs validity vs semantics Recursive reasoning Structure Classification Complexity & impossibility Reuse Algorithmic reasoning Function vs data Typing Scaling up Complexity Static vs dynamic Invariant 19
  • 20. Invariants: loops as problem-solving strategy A loop invariant is a property that:  Is easy to establish initially (even to cover a trivial part of the data)  Is easy to extend to cover a bigger part  If covering all data, gives the desired result! 20
  • 21. Computing the maximum of a list from ??? invariant ??? across structure as i loop . Result := max (Result, i item) end 21
  • 22. Loop as approximation strategy s1 s2 si sn .. s 1) Loop body: Result = a 1 = Max (s 1 i := i + 1 Result = Max (s 1 .. s 2) Result := max (Result , s i ) Result = Max (s 1 .. s i ) The loop Result = Max (s 1 .. s n ) invariant 22
  • 23. Reversing a list 1 2 3 4 5 right i first_element pivot from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot.right first_element.put_right (i ) end 23
  • 24. Reversing a list 1 2 3 4 5 right i first_element pivot from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot.right first_element.put_right (i ) end 24
  • 25. Reversing a list 1 2 3 4 5 right i first_element pivot from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot.right first_element.put_right (i ) end 25
  • 26. Reversing a list 1 2 3 4 5 right i first_element pivot from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot.right first_element.put_right (i ) end 26
  • 27. Reversing a list 1 2 3 4 5 right i first_element pivot from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot.right first_element.put_right (i ) end 27
  • 28. Why does it work? 1 2 3 4 5 right i first_element pivot from pivot := first_element first_element := Void until pivot = Void loop Invariant: from first_element i := first_element following right, initial items in inverse order; from pivot, first_element := pivot rest of items in original order pivot := pivot.right first_element.put_right (i ) end 28
  • 29. Levenshtein distance “Beethoven” to “Beatles” B E E T H O V E N A L S Operation R D R D R Distance 0 0 1 1 2 3 4 4 5 29
  • 30. B E A T L E S 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7 B 1 1 0 1 2 3 4 5 6 E 2 2 1 0 1 2 3 4 5 E 3 3 2 1 1 2 3 3 4 T 4 4 3 2 2 1 2 3 4 H 5 5 4 3 3 2 2 3 4 D
  • 31. Levenshtein algorithm .. across r : 1 | | rows as i loop .. across c : 1 | | columns as j invariant -- For all p : 1 .. i, q : 1 .. j –1, we can turn source [1 .. p ] ??? -- into target [1 .. q ] in D [p, q ] operations loop if source [i ] = target [ j ] then D [i, j ] := D [ i -1, j -1] else D [i, j ] := 1 + min (D [i -1, j ], D [i , j - 1], D [i - 1, j - 1]) end end end Result := D [rows, columns] 31
  • 32. B E A T L E S 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7 Invariant: each D [i, j ] is distance from B 1 1 0 1 source [1..i ] to target [1..j ] 2 3 4 5 6 E 2 2 1 0 1 2 3 4 5 E 3 3 2 1 1 2 3 3 4 RD T 4 4 3 2 2 1 I 2 H 5 I D R Insert Delete Replace
  • 33. Concepts or skills? Skills supporting concepts 33
  • 34. Outside-in (Inverted Curriculum): intro course Fully object-oriented from the start, using Eiffel Design by Contract principles from the start Component based: students use existing software (TRAFFIC library):  They start out as consumers Michela Pedroni & numerous students  They end up as producers! ≈ 150,000 lines of Eiffel “Progressive opening of the black boxes” TRAFFIC is graphical, multimedia and extendible 34
  • 35. (Approach 3: teaching a specific language) First Java program: class First { public static void main(String args[]) { System.out.println("Hello World!"); } } You’ll understand Do as I say, when you grow up! not as I do 35
  • 36. Our first “program” class PREVIEW inherit TOURISM feature explore -- Prepare & animate route do Paris.display Louvre.spotlight Metro.highlight Route1.animate end Text to input end 36
  • 37. 37
  • 39. Principles of the ETH course  Reuse software : inspiration, imitation, abstraction  See lots of software  Learn to reuse through interfaces and contracts  Interesting examples from day one  Combination of principles and practices touch.ethz.ch Traditional topics too: algorithms, control structures, basic data structures, recursion, syntax & BNF, … Advanced topics: closures & lambda-calculus, some design patterns, intro to software engineering… 39
  • 40. 1. Definitions: programming and software engineering 2. Lessons from experience: teaching programming 3. Lessons from experience: teaching software engineering 4. General lessons 40
  • 41. Teaching software engineering Basic courses:  Software engineering (3rd year)  Software architecture (2nd year) Advanced courses:  Distributed & outsourced software engineering (DOSE)  Software verification  (etc.) 41
  • 42. Some principles for SE/SA courses Basic goal: cover what a good programming student does not know about SE  Description Do not attempt a catalog  Implementation  Do teach key industry practices (e.g. UML)  Assessment Management  Emphasize non-”I” & non-”N”parts   Operation  SE is not SA  Notation  A university is not a company  Emphasize falsifiable knowledge  Include a project (see next) 42
  • 43. Principles for SE course projects  Include implementation  Students implement what they specify  Swap development & testing  Manage collaboration  Spell out project’s pedagogical goals  Choose which industry characteristics to include & not 43
  • 45. One thing I would like to know… Designing good non-multiple-choice exam questions for SE Example from a medical textbook*: Case History B A woman (24 years of age; height: 1.70 m; weight: 60 kg) is in hospital due to a tremendous thirst, and she drinks large amounts of water. Since she is producing 10 or more litres of urine each day, the doctors suspect the diagnosis to be diabetes insipidus. The vasopressin concentration in plasma (measured by a RIA method) is 10 fmol per l. […] The extracellular volume (ECV) is 20% of her body weight. […] 1. Calculate the secretion of vasopressin (in mg/hour) from the neurohypophysis of a normal 60-kg person and of this patient […] 4. Estimate the relation between this concentration and that of a healthy individual. 5. Does this ratio have implications for the interpretation of her special type of diabetes insipidus? 6. Is it dangerous to lose 10 litres of urine per day? *www.mfi.ku.dk/ppaulev/chapter26/Chapter%2026.htm 45
  • 46. Distributed software engineering Today’s software development is multipolar University seldom teach this part! “Software Engineering for Outsourced and Offshore Development” since 2003, with Peter Kolb Since 2007: Distributed & Outsourced Software Engineering (DOSE) The project too is distributed. Currently: ETH, Politecnico di Milano, U. of Nijny Novgorod, Odessa Polytechnic, U. Debrecen, Hanoi University of Technology 46
  • 47. The DOSE project Setup: each group is a collection of teams from different university; usually 2 teams, sometimes 3 Division by functionality, not lifecycle Results:  Hard for students  Initial reactions often negative  In the end it works out  The main lesson: interfaces & abstraction Open to more institutions (mid-Sept to mid-Dec 2010): http://se.ethz.ch/dose 47
  • 48. 1. Definitions: programming and software engineering 2. Lessons from experience: teaching programming 3. Lessons from experience: teaching software engineering 4. Lessons: general 48
  • 49. Hindering SE teaching & research (More on these issues on my blog, bertrandmeyer.com) 1. No systematic postmortem on software disasters such as: Ariane 5 (Lions/Kahn, see Jézéquel & Meyer) Tokyo Stock Exchange (Tetsuo Tamai, Social Impact of Information System Failures, IEEE Computer, June 09) 2. Difficulty of funding programmer positions 3. Need better empirical software engineering 49
  • 50. General lessons learned 1. Whatever we teach should be falsifiable 2. Let us not lower our intellectual guards 3. Tools and languages matter 4. Teach skills supporting concepts 5. Technology is key 6. Programming is at the center of software engineering 7. We are still at the beginning, but should be proud se.ethz.ch (chair) touch.ethz.ch (intro textbook) se.ethz.ch/dose (distributed course) bertrandmeyer.com (blog) Chair of eiffel.com (languages & tools) Software Engineering 50