<?xml version="1.0" encoding="UTF-8"?>
<CourseUnit xmlns="http://www.manchester.ac.uk/CUICourseUnitDetails" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.manchester.ac.uk/CUICourseUnitDetails.xsd">
  <UnitCode Applicant="Y" Label="Unit code" Student="Y">
    <Code>COMP26020</Code>
  </UnitCode>
  <UnitTitle Applicant="Y" Label="Unit title" Student="Y">
    <Title>Programming Languages &amp; Paradigms</Title>
  </UnitTitle>
  <MaxUnits Applicant="Y" Label="Credit rating" Student="Y">
    <Units>20</Units>
  </MaxUnits>
  <TeachingPeriods Applicant="Y" Label="Teaching period(s)" Student="Y">
    <Period>Full year</Period>
  </TeachingPeriods>
  <AcademicCareer Applicant="Y" Label="Academic career" Student="Y">
    <Value>Undergraduate</Value>
  </AcademicCareer>
  <UnitLevel Applicant="Y" Label="Unit level" Student="Y">
    <Level>Level 2</Level>
  </UnitLevel>
  <StaffList Applicant="Y" Label="Teaching staff" RoleLabel="Course Unit Role" Student="Y">
    <StaffMember>
      <Name>Joseph Razavi</Name>
      <Role>Unit coordinator</Role>
    </StaffMember>
  </StaffList>
  <OfferedBy Applicant="Y" Label="Offered by" Student="Y">
    <OrganisationList>
      <Organisation>
        <OrgName>Department of Computer Science</OrgName>
      </Organisation>
    </OrganisationList>
    <GroupList>
      <Group>
        <GroupName></GroupName>
      </Group>
    </GroupList>
    <FheqLevels>
      <FheqLevel>
        <LevelNumber>1</LevelNumber>
        <LevelName>FHEQ level (Framework for Higher Education Qualifications) ' Middle part of Bachelors ' </LevelName>
      </FheqLevel>
    </FheqLevels>
    <Ects>
      <MaxUnits>European Credit Transfer &amp; Accumulation System Rating :   10.0</MaxUnits>
    </Ects>
  </OfferedBy>
  <MarketingOverview Applicant="Y" Label="Marketing Course unit overview" Student="">
    <Content>&lt;p&gt;There is a variety of programming languages designed with different features aiming to address different types of problems. The unit is an advanced course for students who have already mastered one programming language. It is trying to consider the broad spectrum of different programming paradigms and how these can be used and translated.&lt;/p&gt;</Content>
  </MarketingOverview>
  <UnitOverview Applicant="" Label="Course unit overview" Student="Y">
    <Content>&lt;div&gt;&lt;span style="font-size:11pt"&gt;&lt;span style="line-height:107%"&gt;&lt;span style="font-family:Calibri,sans-serif"&gt;There is a variety of programming languages designed with different features aiming to address different types of problems. The unit is an advanced course for students who have already mastered one programming language. It is trying to consider the broad spectrum of different programming paradigms and how these can be used and translated.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</Content>
  </UnitOverview>
  <Aims Applicant="Y" Label="Aims" Student="Y">
    <Content>&lt;div&gt;&lt;p style="margin-bottom:11px"&gt;&lt;span style="font-size:11pt"&gt;&lt;span style="line-height:107%"&gt;&lt;span style="font-family:Calibri,sans-serif"&gt;To provide advanced coverage of the main programming paradigms used in computing, how they differ, how they can be used and translated.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</Content>
  </Aims>
  <LearningOutcomes Applicant="Y" Label="Learning outcomes" Student="Y">
    <Content>&lt;ul&gt;&lt;li&gt;Design, implement, modify, test, debug and evaluate programs in C, C++, Solidity and Haskell&lt;br/&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Compare and contrast the appropriateness of various programming languages and paradigms with respect to real-world problems&lt;br/&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Explain the advantages and disadvantages of functional programming with respect to imperative programming&lt;br/&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Describe the principles, outline the problems, and discuss methods and techniques applied to the compilation process&lt;br/&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Explain the role of each of the basic components of a standard compiler&lt;br/&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Write C/C++ code conforming to best practice&lt;br/&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Identify the impact of modern trends in programming languages&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</Content>
  </LearningOutcomes>
  <Knowledge Applicant="Y" Label="Knowledge and understanding" Student="Y">
    <Content>&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;</Content>
  </Knowledge>
  <IntellectualSkills Applicant="Y" Label="Intellectual skills" Student="Y">
    <Content></Content>
  </IntellectualSkills>
  <PracticalSkills Applicant="Y" Label="Practical skills" Student="Y">
    <Content>&lt;div&gt;	Analytical skills&lt;/div&gt;&lt;div&gt;	Innovation/creativity&lt;/div&gt;&lt;div&gt;	Problem solving&lt;/div&gt;&lt;div&gt;	&amp;nbsp;&lt;/div&gt;</Content>
  </PracticalSkills>
  <TransferableSkills Applicant="Y" Label="Transferable skills and personal qualities" Student="Y">
    <Content></Content>
  </TransferableSkills>
  <EmployabilitySkillsList Applicant="Y" Label="Employability skills" Student="Y">
    <Skill>
      <SkillId></SkillId>
      <SkillDescription></SkillDescription>
    </Skill>
  </EmployabilitySkillsList>
  <Syllabus Applicant="Y" Label="Syllabus" Student="Y">
    <Content>&lt;div&gt;	The course unit will be structured according according to 4 complementary parts:&lt;/div&gt;&lt;div&gt;	&amp;nbsp;&lt;/div&gt;&lt;div&gt;	Part I: Overview and the imperative programming paradigm: C, C++&lt;/div&gt;&lt;div&gt;	Overview of the main programming paradigms: imperative vs declarative, structured, object-oriented, concurrent, functional&lt;/div&gt;&lt;div&gt;	Structured imperative programming in C&lt;/div&gt;&lt;div&gt;	Syntax, type system, control flow, build/debugging tools&lt;/div&gt;&lt;div&gt;	Dynamic memory allocation, pointers&lt;/div&gt;&lt;div&gt;	Introduction to Object Oriented programming in C++&lt;/div&gt;&lt;div&gt;	Polymorphism and Inheritance&lt;/div&gt;&lt;div&gt;	C/C++ use cases&lt;/div&gt;&lt;div&gt;	high performance computing, systems/kernel programming&lt;/div&gt;&lt;div&gt;	Memory (un)safety in C/C++ programs, memory errors: vulnerabilities, attacks, defenses&lt;/div&gt;&lt;div&gt;	&amp;nbsp;&lt;/div&gt;&lt;div&gt;	Part II: Functional programming: Haskell&lt;/div&gt;&lt;div&gt;	Basic concepts of functional programming: datatypes and recursive functions&lt;/div&gt;&lt;div&gt;	Haskell basics&lt;/div&gt;&lt;div&gt;	List comprehension, Case study: sorting algorithms&lt;/div&gt;&lt;div&gt;	Trees, Case study: binary search trees, red-black trees&lt;/div&gt;&lt;div&gt;	Using higher-order functions: lambda, map, fold&lt;/div&gt;&lt;div&gt;	Monads&lt;/div&gt;&lt;div&gt;	Type classes&lt;/div&gt;&lt;div&gt;	Lazy Evaluation&lt;/div&gt;&lt;div&gt;	Case study: Parser combinators&lt;/div&gt;&lt;div&gt;	&amp;nbsp;&lt;/div&gt;&lt;div&gt;	Part III: Compilation of Programming Languages&lt;/div&gt;&lt;div&gt;	Introduction: What is a compiler, high-level view of compilation, a general structure of a compiler.&lt;/div&gt;&lt;div&gt;	The Front-End: Lexical analysis, syntax analysis, semantic analysis&lt;/div&gt;&lt;div&gt;	The Middle-End: Intermediate representation, code optimisation&lt;/div&gt;&lt;div&gt;	The Back-End: Code generation&lt;/div&gt;&lt;div&gt;	&amp;nbsp;&lt;/div&gt;&lt;div&gt;	Part IV: Advanced Topics&lt;/div&gt;&lt;div&gt;	Introduction to Solidity&lt;/div&gt;&lt;div&gt;	Concurrent Execution&lt;/div&gt;&lt;div&gt;	Blockchains and Smart Contracts&lt;/div&gt;&lt;div&gt;	Contemporary Trends in Languages&lt;/div&gt;&lt;div&gt;	&amp;nbsp;&lt;/div&gt;&lt;div&gt;	&amp;nbsp;&lt;/div&gt;</Content>
  </Syllabus>
  <TeachingMethods Applicant="Y" Label="Teaching and learning methods" Student="Y">
    <Content>&lt;div&gt;Lectures: 44&amp;nbsp;in total, 2 x 1 hour&amp;nbsp;per week&lt;/div&gt;&lt;div&gt;Laboratories:&amp;nbsp; 2-hour sessions every fortnight (10 hours per Semester, 20 hours in total)&lt;/div&gt;&lt;div&gt;Feedback: Formative feedback based on assessment of solutions to small problems. Feedback is also provided by teaching assistants in the laboratory.&lt;/div&gt;&lt;div&gt;Assessment: one 2-hour exam at the end of the module.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;</Content>
  </TeachingMethods>
  <AssessmentMethods Applicant="Y" Label="Assessment methods" Student="Y">
    <IntroText> </IntroText>
    <Method>
      <MethodId>1</MethodId>
      <MethodName>Written exam</MethodName>
      <MethodWeight>70%</MethodWeight>
    </Method>
    <Method>
      <MethodId>2</MethodId>
      <MethodName>Written assignment (inc essay)</MethodName>
      <MethodWeight>30%</MethodWeight>
    </Method>
  </AssessmentMethods>
  <FeedbackMethods Applicant="Y" Label="Feedback methods" Student="Y">
    <Content>&lt;p&gt;Feedback through marking&lt;/p&gt;</Content>
  </FeedbackMethods>
  <RequirementsList Applicant="Y" Label="Pre/co-requisites" Student="Y">
    <Requirement>
      <UnitCode>COMP16321</UnitCode>
      <UnitTitle>Introduction to Programming 1</UnitTitle>
      <RequirementType>Pre-Requisite</RequirementType>
      <Description>Compulsory</Description>
    </Requirement>
    <Requirement>
      <UnitCode>COMP16412</UnitCode>
      <UnitTitle>Introduction to Programming 2</UnitTitle>
      <RequirementType>Pre-Requisite</RequirementType>
      <Description>Compulsory</Description>
    </Requirement>
    <AdditionalRequirement>COMP26020 pre-requisites&lt;p&gt;COMP16321 and COMP16412 are pre-requisites for COMP26020&lt;/p&gt;</AdditionalRequirement>
  </RequirementsList>
  <AcademicPrograms Applicant="Y" Label="Academic programmes" Student="Y">
    <AcademicProgram>
      <Program></Program>
      <Plan></Plan>
      <Level></Level>
      <Requirement></Requirement>
    </AcademicProgram>
  </AcademicPrograms>
  <FreeChoice Applicant="Y" Label="Available as a free choice unit?" Student="Y">
    <Content>N</Content>
  </FreeChoice>
  <Accreditation Applicant="Y" Label="Accreditation" Student="Y">
    <Content></Content>
  </Accreditation>
  <RecommendedReading Applicant="Y" Label="Recommended reading" Student="Y">
    <Content>&lt;p&gt;&lt;a href="http://studentnet.cs.manchester.ac.uk/syllabus/index.php?code=COMP26020&amp;amp;year=2020"&gt;COMP26020 reading list&lt;/a&gt; can be found on the Department of Computer Science internal pages&lt;/p&gt;</Content>
  </RecommendedReading>
  <StudyHours Applicant="Y" Label="Study hours" Student="Y">
    <IntroText> </IntroText>
    <ScheduledHours Applicant="Y" Label="Scheduled activity hours" Student="Y">
      <ActivityHours>
        <ActivityType>Lectures</ActivityType>
        <Hours>44</Hours>
      </ActivityHours>
      <ActivityHours>
        <ActivityType>Practical classes &amp; workshops</ActivityType>
        <Hours>20</Hours>
      </ActivityHours>
    </ScheduledHours>
    <PlacementHours Applicant="Y" Label="Placement hours" Student="Y">
      <ActivityHours>
        <ActivityType></ActivityType>
        <Hours>0</Hours>
      </ActivityHours>
    </PlacementHours>
    <TotalHours Applicant="Y" Label="Independent study hours" Student="Y">
      <Hours>136</Hours>
    </TotalHours>
  </StudyHours>
  <Notes Applicant="Y" Label="Additional notes" Student="Y">
    <Content></Content>
  </Notes>
</CourseUnit>
