Programming Study Programming via the best free online courses/MOOCs from top universities and colleges.

Leave a comment

Source: https://www.class-central.com/subject/programming-and-software-development

Add
Course Name
Start Date
Rating
Ad Introduction to Programming for the Visual Arts with p5.js

viaKadenze

4th Nov, 2015
1 2 3 4 5
DEV206.2x: Designing Advanced Applications using XAML

viaedX

31st Oct, 2015
1 2 3 4 5

0

Using Databases with Python

viaCoursera

1st Nov, 2015
1 2 3 4 5

0

Como aprimorar e monetizar seu aplicativo para iOS e Apple Watch

viaCoursera

1st Nov, 2015
1 2 3 4 5

0

Interactive Computer Graphics

viaCoursera

2nd Nov, 2015
1 2 3 4 5

2

Como criar aplicativos com múltiplas telas para iPhone e iPad

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

Code Yourself! An Introduction to Programming

viaCoursera

2nd Nov, 2015
1 2 3 4 5

2

Introduction to CSS3

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

¡A Programar! Una introducción a la programación

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

Front-End Web UI Frameworks and Tools

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

Interfaz de usuario en iOS

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

Java Programming: Solving Problems with Software

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

iOS App Development Basics

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

Knowledge Engineering with Semantic Web TechnologiesviaopenHPI 2nd Nov, 2015
1 2 3 4 5

0

Responsive Web Design

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

Swift: programar para iOS

viaCoursera

2nd Nov, 2015
1 2 3 4 5

0

Extending SAP Products with SAP HANA Cloud PlatformviaopenSAP 3rd Nov, 2015
1 2 3 4 5

1

Introduction to Programming for the Visual Arts with p5.js

viaKadenze

4th Nov, 2015
1 2 3 4 5

0

Spielend Programmieren lernen!viaopenHPI 9th Nov, 2015
1 2 3 4 5

0

INF201.13x: Introduction to Cloud Computing

viaedX

12th Nov, 2015
1 2 3 4 5

5

Accediendo a la nube con iOS

viaCoursera

Oct, 2015
1 2 3 4 5

0

計算機程式設計

viaCoursera

23rd Nov, 2015
1 2 3 4 5

0

An Introduction to Interactive Programming in Python (Part 2)

viaCoursera

14th Nov, 2015
1 2 3 4 5

17

Introduction to Meteor.js Development

viaCoursera

16th Nov, 2015
1 2 3 4 5

0

Ruby on Rails Web Services and Integration with MongoDB

viaCoursera

16th Nov, 2015
1 2 3 4 5

0

Java Programming: Arrays, Lists and Structured Data

viaCoursera

16th Nov, 2015
1 2 3 4 5

0

IT.1.1x: Introduction to Programming with Java Part 1: Starting to Code with Java

viaedX

17th Nov, 2015
1 2 3 4 5

2

Client Needs and Software Requirements

viaCoursera

23rd Nov, 2015
1 2 3 4 5

0

Front-End JavaScript Frameworks: AngularJS

viaCoursera

23rd Nov, 2015
1 2 3 4 5

0

DEV209.3x: Developing Windows 10 UWP Apps – Part 3

viaedX

25th Nov, 2015
1 2 3 4 5

0

Introducción a Java

viaCoursera

Self paced
1 2 3 4 5

0

Programming Languages

viaUdacity

Self paced
1 2 3 4 5

7

Web DevelopmentviaUdacity

Self paced
1 2 3 4 5

16

Software Testing

viaUdacity

Self paced
1 2 3 4 5

5

Software Debugging

viaUdacity

Self paced
1 2 3 4 5

2

UNSW Computing 1 – The Art of ProgrammingviaOpenLearning Self paced
1 2 3 4 5

1

Intro to Parallel Programming

viaUdacity

Self paced
1 2 3 4 5

2

HTML5 Game Development

viaUdacity

Self paced
1 2 3 4 5

4

Interactive 3D Graphics

viaUdacity

Self paced
1 2 3 4 5

4

Functional Hardware Verification

viaUdacity

Self paced
1 2 3 4 5

1

Semantic Web TechnologiesviaopenHPI Self paced
1 2 3 4 5

1

Datenmanagement mit SQLviaopenHPI Self paced
1 2 3 4 5

0

Intro to Java Programming

viaUdacity

Self paced
1 2 3 4 5

10

User Experience for the WebviaOpen2Study Self paced
1 2 3 4 5

5

Web-TechnologienviaopenHPI Self paced
1 2 3 4 5

0

Introduction to Mobile Solution DevelopmentviaopenSAP Self paced
1 2 3 4 5

1

Intro to Point & Click App Development

viaUdacity

Self paced
1 2 3 4 5

2

Introduction to Software Development on SAP HANAviaopenSAP Self paced
1 2 3 4 5

6

Mobile Web Development

viaUdacity

Self paced
1 2 3 4 5

0

DB: Introduction to Databases

viaStanford OpenEdx

Self paced
1 2 3 4 5

6

How to create a Windows 8 App

viaIndependent

Self paced
1 2 3 4 5

0

Load the next 50 courses of 256

HarvardX – Free online courses from Harvard University

Leave a comment

Source: https://www.edx.org/school/harvardx

HarvardXFree online courses from Harvard University

Harvard University is devoted to excellence in teaching, learning, and research, and to developing leaders in many disciplines who make a difference globally. Harvard faculty are engaged with teaching and research to push the boundaries of human knowledge. The University has twelve degree-granting Schools in addition to the Radcliffe Institute for Advanced Study.

Established in 1636, Harvard is the oldest institution of higher education in the United States. The University, which is based in Cambridge and Boston, Massachusetts, has an enrollment of over 20,000 degree candidates, including undergraduate, graduate, and professional students. Harvard has more than 360,000 alumni around the world.

Harvard University MOOCs

Browse free online courses in a variety of subjects. Harvard University courses found below can be audited free or students can choose to receive a verified certificate for a small fee. Select a course to learn more.

MIT Sloan School of Management – Free MBA Courses

Leave a comment

Source: http://ocw.mit.edu/courses/sloan-school-of-management/

MIT Sloan is a world-class business school long renowned for thought leadership and the ability to successfully partner theory and practice.

MIT Sloan shares a legacy of innovative thinking and collaboration with MIT, and this relationship – unique among business schools – is one that provides tremendous opportunity for students alumni.

At MIT Sloan, customized programs and experiences meet students’ specific needs and help them to reach their personal and professional goals. A commitment to concept-based action learning enables students to gain the experience and skills necessary to enhanced and lead their organizations – and improve the way business is done across the globe.

SLOAN SCHOOL OF MANAGEMENT COURSES

Course # Course Title Level
15.020 Competition in Telecommunications Undergraduate
15.031J Energy Decisions, Markets, and Policies Undergraduate
15.053 Optimization Methods in Management Science Undergraduate
15.075J Statistical Thinking and Data Analysis Undergraduate
15.279 Management Communication for Undergraduates Undergraduate
15.301 Managerial Psychology (Fall 2006) Undergraduate
15.301 Managerial Psychology Laboratory (Fall 2004) Undergraduate
15.301 Managerial Psychology Laboratory (Spring 2003) Undergraduate
15.501 Introduction to Financial and Managerial Accounting (Spring 2004) Undergraduate
15.565J Integrating eSystems & Global Information Systems (Spring 2002) Undergraduate
15.568A Practical Information Technology Management Undergraduate
15.578J Integrating eSystems & Global Information Systems (Spring 2002) Undergraduate
15.615 Law for the Entrepreneur and Manager (Spring 2003) Undergraduate
15.628J Patents, Copyrights, and the Law of Intellectual Property Undergraduate
15.647 Law for the Entrepreneur and Manager (Spring 2003) Undergraduate
15.668 People and Organizations Undergraduate
15.772J D-Lab: Supply Chains Undergraduate
15.010 Economic Analysis for Business Decisions (Fall 2004) Graduate
15.011 Economic Analysis for Business Decisions (Fall 2004) Graduate
15.012 Applied Macro- and International Economics (Spring 2011) Graduate
15.014 Applied Macro- and International Economics (Spring 2004) Graduate
15.015 Macro and International Economics Graduate
15.021J Real Estate Economics Graduate
15.023J Global Climate Change: Economics, Science, and Policy Graduate
15.024 Applied Economics for Managers Graduate
15.032J Engineering, Economics and Regulation of the Electric Power Sector Graduate
15.040 Game Theory for Managers Graduate
15.057 Systems Optimization Graduate
15.060 Data, Models, and Decisions Graduate
15.062 Data Mining Graduate
15.063 Communicating With Data Graduate
15.066J System Optimization and Analysis for Manufacturing Graduate
15.067 Competitive Decision-Making and Negotiation Graduate
15.070J Advanced Stochastic Processes Graduate
15.072J Queues: Theory and Applications Graduate
15.073J Logistical and Transportation Planning Methods Graduate
15.081J Introduction to Mathematical Programming Graduate
15.082J Network Optimization Graduate
15.083J Integer Programming and Combinatorial Optimization Graduate
15.084J Nonlinear Programming (Spring 2004) Graduate
15.084J Nonlinear Programming (Spring 2003) Graduate
15.085J Fundamentals of Probability Graduate
15.093J Optimization Methods Graduate
15.094J Systems Optimization: Models and Computation (SMA 5223) Graduate
15.097 Prediction: Machine Learning and Statistics Graduate
15.098 Special Seminar in Applied Probability and Stochastic Processes Graduate
15.099 Readings in Optimization Graduate
15.136J Principles and Practice of Drug Development Graduate
15.220 Global Strategy and Organization (Spring 2012) Graduate
15.220 Global Strategy and Organization (Spring 2008) Graduate
15.223 Global Markets, National Politics and the Competitive Advantage of Firms (Fall 2011) Graduate
15.224 Global Markets, National Politics and the Competitive Advantage of Firms (Spring 2003) Graduate
15.225 Economy and Business in Modern China and India Graduate
15.229 Managing Global Integration Graduate
15.232 Business Model Innovation: Global Health in Frontier Markets Graduate
15.269 Literature, Ethics, Authority Graduate
15.269B Literature, Ethics and Authority Graduate
15.270 Ethical Practice: Professionalism, Social Responsibility, and the Purpose of the Corporation Graduate
15.277 Special Seminar in Communications: Leadership and Personal Effectiveness Coaching Graduate
15.280 Communication for Managers Graduate
15.281 Advanced Managerial Communication Graduate
15.289 Communication Skills for Academics Graduate
15.310 Managerial Psychology (Fall 2006) Graduate
15.310 Managerial Psychology Laboratory (Fall 2004) Graduate
15.310 Managerial Psychology Laboratory (Spring 2003) Graduate
15.311 Organizational Processes Graduate
15.316 Building and Leading Effective Teams Graduate
15.317 Organizational Leadership and Change Graduate
15.320 Strategic Organizational Design Graduate
15.322 Leading Organizations II Graduate
15.328 Team Project Graduate
15.341 Individuals, Groups, and Organizations Graduate
15.342J Organizations and Environments Graduate
15.343 Managing Transformations in Work, Organizations, and Society Graduate
15.347 Doctoral Seminar in Research Methods I Graduate
15.348 Doctoral Seminar in Research Methods II Graduate
15.351 Managing Innovation and Entrepreneurship Graduate
15.351 Managing the Innovation Process Graduate
15.352 Managing Innovation: Emerging Trends Graduate
15.356 How to Develop Breakthrough Products and Services Graduate
15.356 How to Develop “Breakthrough” Products and Services Graduate
15.358 The Software Business Graduate
15.369 Corporate Entrepreneurship: Strategies for Technology-Based New Business Development Graduate
15.387 Entrepreneurial Sales Graduate
15.389A Global Entrepreneurship Lab: Asia-Pacific Graduate
15.389B Global Entrepreneurship Lab: Latin America, the Middle East, and Africa Graduate
15.390 New Enterprises Graduate
15.391 Early Stage Capital Graduate
15.394 Designing and Leading the Entrepreneurial Organization Graduate
15.401 Finance Theory I Graduate
15.402 Finance Theory II Graduate
15.414 Financial Management Graduate
15.426J Real Estate Finance and Investment Graduate
15.427J Real Estate Capital Markets Graduate
15.428 Tools for Analysis: Design for Real Estate and Infrastructure Development Graduate
15.428J Advanced Topics in Real Estate Finance Graduate
15.431 Entrepreneurial Finance Graduate
15.433 Investments Graduate
15.450 Analytics of Finance Graduate
15.511 Financial Accounting (Summer 2004) Graduate
15.514 Financial and Managerial Accounting Graduate
15.515 Financial Accounting (Fall 2003) Graduate
15.516 Introduction to Financial and Managerial Accounting (Spring 2004) Graduate
15.518 Taxes and Business Strategy Graduate
15.521 Management Accounting and Control (Spring 2003) Graduate
15.535 Business Analysis Using Financial Statements Graduate
15.561 Information Technology Essentials Graduate
15.564 Information Technology I Graduate
15.566 Information Technology as an Integrating Force in Manufacturing Graduate
15.567 The Economics of Information: Strategy, Structure and Pricing Graduate
15.571 Generating Business Value from Information Technology Graduate
15.575 Research Seminar in IT and Organizations: Economic Perspectives Graduate
15.598 IT and Business Transformation Graduate
15.599 Workshop in IT: Collaborative Innovation Networks Graduate
15.616 Innovative Businesses and Breakthrough Technologies – The Legal Issues Graduate
15.617 The Law of Corporate Finance and Financial Markets Graduate
15.649 The Law of Mergers and Acquisitions Graduate
15.660 Strategic HR Management Graduate
15.665 Power and Negotiation Graduate
15.667 Negotiation and Conflict Management Graduate
15.676 Work, Employment, and Industrial Relations Theory Graduate
15.677J Urban Labor Markets and Employment Policy Graduate
15.678J Political Economy I Graduate
15.760A Operations Management Graduate
15.760B Introduction to Operations Management (Spring 2004) Graduate
15.761 Introduction to Operations Management (Spring 2013) Graduate
15.762J Supply Chain Planning Graduate
15.763J Manufacturing System and Supply Chain Design Graduate
15.764 The Theory of Operations Management Graduate
15.768 Management of Services: Concepts, Design, and Delivery Graduate
15.769 Operations Strategy (Fall 2010) Graduate
15.769 Operations Strategy (Spring 2003) Graduate
15.770J Logistics Systems Graduate
15.778 Management of Supply Networks for Products and Services Graduate
15.783J Product Design and Development Graduate
15.792J Proseminar in Manufacturing Graduate
15.795 Seminar in Operations Management Graduate
15.810 Marketing Management (Fall 2010) Graduate
15.810 Marketing Management (Fall 2004) Graduate
15.812 Marketing Management (Fall 2002) Graduate
15.818 Pricing Graduate
15.821 Listening to the Customer Graduate
15.822 Strategic Marketing Measurement Graduate
15.834 Marketing Strategy Graduate
15.835 Entrepreneurial Marketing Graduate
15.840 Special Seminar in Marketing: Marketing Management Graduate
15.871 Introduction to System Dynamics Graduate
15.872 System Dynamics II Graduate
15.875 Applications of System Dynamics Graduate
15.879 Research Seminar in System Dynamics Graduate
15.902 Strategic Management I Graduate
15.904 Strategic Management II Graduate
15.912 Technology Strategy Graduate
15.963 Advanced Strategy Graduate
15.963 Management Accounting and Control (Spring 2007) Graduate
15.963 Organizations as Enacted Systems: Learning, Knowing and Change Graduate
15.965 Technology Strategy for System Design and Management Graduate
15.967 Managing and Volunteering In the Non-Profit Sector Graduate
15.968 The Sociology of Strategy Graduate
15.969 Dynamic Leadership: Using Improvisation in Business Graduate
15.970 Digital Anthropology Graduate
15.971 Developmental Entrepreneurship Graduate
15.972 Professional Seminar in Sustainability Graduate
15.974 Practical Leadership Graduate
15.974 Leadership Lab Graduate
15.975 U-Lab: Leading Profound Innovation for a More Sustainable World Graduate
15.975 Special Seminar in Management The Nuts and Bolts of Business Plans Graduate
15.978 Leadership Tools and Teams: A Product Development Lab Graduate
15.980J Organizing for Innovative Product Development Graduate
15.988 System Dynamics Self Study Graduate
15.990 Architecture and Communication in Organizations Graduate
15.992 S-Lab: Laboratory for Sustainable Business Graduate
15.996 Cross-Cultural Leadership Graduate
15.997 Practice of Finance: Advanced Corporate Risk Management Graduate
15.S07 GlobalHealth Lab Graduate
15.S50 Poker Theory and Analytics Graduate

ARCHIVED SLOAN SCHOOL OF MANAGEMENT COURSES

Some prior versions of courses listed above have been archived in OCW’s DSpace@MIT repository for long-term access and preservation. Links to archived prior versions of a course may be found on that course’s “Other Versions” tab.

Additionally, the Archived Sloan School of Management Courses page has links to every archived course from this department.

Vybrid Reference Manual F-Series

Leave a comment

Source: http://cache.freescale.com/files/32bit/doc/ref_manual/VYBRIDRM.pdf

This document describes the features, architecture, and programming model of the Freescale Vybrid microprocessor (MPU).

This document is primarily for system architects and software application developers who are using or considering using this device in a system.

Main features include

• Cortex-A5 @500MHz (1.57 DMIPS/MHz) with TrustZone with 32 KB I-Cache/32 KB D-Cache

• Neon Media Processing Engine (MPE) co-processor and double precision Floating Point Unit (FPU)

• Cortex-M4 @ 167 MHz with 16 KB I-Cache/16 KB D-Cache

• 1.5 MB on-chip SRAM of which 512 KB optionally supports ECC

• Support for LPDDR2/DDR3

• Dual TFT display up to SVGA and optional 40×4 and 38×6 Segmented LCD

• Dual 10/100 Ethernet with on-chip L2 Switch

• Dual USB OTG with on-chip HS PHY and on-chip HS/FS/LS PHY

• Advanced Security supporting Symmetric with on-chip Tamper detection

• Rich set of communication peripherals and general purpose features

• Advanced digital audio support with multiple audio interfaces and hardware asynchronous sample-rate converter co-processor.

• Multiple package options that include 176 LQFP, and 364 BGA

7 memory skills that will make you smarter

Leave a comment

Source: http://www.businessinsider.com/memory-skills-2015-10

  1. Retrieval – Bring it back from memory, e.g. Flash cards.
  2. Elaboration – Connect ideas to what you already know, e.g. Heat Transfer: how one experiences it when holding a cup of hot coffee.
  3. Interleaving – Varying the subjects, e.g. batters have higher averages when they practice with fast balls, curve balls etc.
  4. Generation – Answer before you have an answer, e.g finding your own answers before the class.
  5. Reflection – Evaluate what happened, e.g. 15% of written reflection improves performance by 23%.
  6. Mnemonics – Use hacks to recall; helps create mental structures, e.g. BODMAS.
  7. Calibration – Know what you don’t know, e.g. taking a quiz or feedback from colleagues.
""Learning ability is probably the most important skill you can have.

Take it from Peter Brown, Henry Roediger, and Mark McDaniel, authors of “Make It Stick: The Science Of Successful Learning.”

“We need to keep learning and remembering all our lives,” they write. “Getting ahead at work takes mastery of job skills and difficult colleagues. … If you’re good at learning, you have an advantage in life.”

And to learn something is to be able to remember it, say the authors, two of whom are psychology professors at Washington University in St. Louis.

Unfortunately, lots of the techniques for learning that we pick up in school don’t help with long-term recall — like cramming or highlighting.

To get over these bad habits, we scoured “Make It Stick” for learning tips.

Here are the takeaways:

View As: One Page Slides

Retrieval: Bring it back from memory.
Retrieval: Bring it back from memory.
benjamingolub/flickr
When you’re attempting to recall an idea, method, or technique from memory, you’re retrieving. Flash cards are a great example: They force you to recall an idea from memory, unlike a technique like highlighting where you’re not burning anything into your brain. The reason retrieval’s so effective is that it strengthens the neural pathways associated with a given concept.

Elaboration: Connect new ideas to what you already know.
Elaboration: Connect new ideas to what you already know.
REUTERS/Osman Orsal
When you try to put a new idea into your own words, you’re elaborating.

“The more you can explain about the way your new learning relates to prior knowledge,” the authors write, “the stronger your grasp of the new learning will be, and the more connections you create that will help you remember it later.”

For instance, if you’re in physics class and trying to understand heat transfer, try to tie the concept into your real-life experiences, say, by imagining how a warm cup of coffee disperses heat into your hands.

Interleaving: Varying your subjects.
Interleaving: Varying your subjects.
Fred Thornhill/REUTERS
When you work on a variety of things at once, you’re interleaving. If you’re trying to understand a subject — from the basics of economics to hitting a pitch — you’re going to learn better if you mix up your examples.

A sports case: Batters who do batting practice with a mix of fastballs, change-ups, and curveballs hit for a higher average. The interleaving helps because when you’re out there in the wild, you need to first discern what kind of problem you’re facing before you can start to find a solution, like a ball coming from a pitcher’s hand.

Generation: Answer before you have an answer.
Generation: Answer before you have an answer.
Flickr/Sebastiaan ter Burg
When you try to give an answer before it’s given to you, you’re generating. “By wading into the unknown first and puzzling through it, you are far more likely to learn and remember the solution than if somebody first sat down to teach it to you,” the authors write.

In an academic setting, you could work finding your own answers before class starts. In a professional setting, you could supply your own ideas when you’re stuck before talking with your boss.

Reflection: Evaluate what happened.
Reflection: Evaluate what happened.
Francisco Osorio/Flickr
When you take a few moments to review what happened with a project or meeting, you’re reflecting. You might ask yourself a few questions: What went well? Where can you improve? What does it remind you of?

Harvard Business School researchers have found reflective writing to be super powerful. Just 15 minutes of written reflection at the end of the day increased performance by 23% for one group of employees.

Mnemonics: Use hacks to recall.
Mnemonics: Use hacks to recall.
Wikimedia Commons
When you’re using an acronym or image to recall something, you’re using a mnemonic. The hall of fame includes abbreviations — Roy G. Biv for the colors of the spectrum (Red, Orange, Yellow, Green, Blue, Indigo, Violet) — and rhyming, like “in 1492, Columbus sailed the ocean blue.”

“Mnemonics are not tools for learning per se,” the authors write, “but for creating mental structures that make it easier to retrieve what you have learned.”

Calibration: Know what you don’t know.
Calibration: Know what you don’t know.
Flickr / Strelka Institute for Media, Architecture and Design
When you get feedback that reveals your ignorance to you, you’re calibrating. “Calibration is simply the act of using an objective instrument to clear away illusions and adjust your judgment to better reflect reality.”

This is necessary since we all suffer from “cognitive illusions”: We think we understand something when we really don’t. So taking a quiz — or gathering feedback from a colleague — helps you to identify those blind spots.

For a deeper dig into the science of learning, make sure to pick up “Make It Stick.” It’s an illuminating read.Learning ability is probably the most important skill you can have.

Take it from Peter Brown, Henry Roediger, and Mark McDaniel, authors of “Make It Stick: The Science Of Successful Learning.”

“We need to keep learning and remembering all our lives,” they write. “Getting ahead at work takes mastery of job skills and difficult colleagues. … If you’re good at learning, you have an advantage in life.”

And to learn something is to be able to remember it, say the authors, two of whom are psychology professors at Washington University in St. Louis.

Unfortunately, lots of the techniques for learning that we pick up in school don’t help with long-term recall — like cramming or highlighting.

To get over these bad habits, we scoured “Make It Stick” for learning tips.

Here are the takeaways:

View As: One Page Slides

Retrieval: Bring it back from memory.
Retrieval: Bring it back from memory.
benjamingolub/flickr
When you’re attempting to recall an idea, method, or technique from memory, you’re retrieving. Flash cards are a great example: They force you to recall an idea from memory, unlike a technique like highlighting where you’re not burning anything into your brain. The reason retrieval’s so effective is that it strengthens the neural pathways associated with a given concept.

Elaboration: Connect new ideas to what you already know.
Elaboration: Connect new ideas to what you already know.
REUTERS/Osman Orsal
When you try to put a new idea into your own words, you’re elaborating.

“The more you can explain about the way your new learning relates to prior knowledge,” the authors write, “the stronger your grasp of the new learning will be, and the more connections you create that will help you remember it later.”

For instance, if you’re in physics class and trying to understand heat transfer, try to tie the concept into your real-life experiences, say, by imagining how a warm cup of coffee disperses heat into your hands.

Interleaving: Varying your subjects.
Interleaving: Varying your subjects.
Fred Thornhill/REUTERS
When you work on a variety of things at once, you’re interleaving. If you’re trying to understand a subject — from the basics of economics to hitting a pitch — you’re going to learn better if you mix up your examples.

A sports case: Batters who do batting practice with a mix of fastballs, change-ups, and curveballs hit for a higher average. The interleaving helps because when you’re out there in the wild, you need to first discern what kind of problem you’re facing before you can start to find a solution, like a ball coming from a pitcher’s hand.

Generation: Answer before you have an answer.
Generation: Answer before you have an answer.
Flickr/Sebastiaan ter Burg
When you try to give an answer before it’s given to you, you’re generating. “By wading into the unknown first and puzzling through it, you are far more likely to learn and remember the solution than if somebody first sat down to teach it to you,” the authors write.

In an academic setting, you could work finding your own answers before class starts. In a professional setting, you could supply your own ideas when you’re stuck before talking with your boss.

Reflection: Evaluate what happened.
Reflection: Evaluate what happened.
Francisco Osorio/Flickr
When you take a few moments to review what happened with a project or meeting, you’re reflecting. You might ask yourself a few questions: What went well? Where can you improve? What does it remind you of?

Harvard Business School researchers have found reflective writing to be super powerful. Just 15 minutes of written reflection at the end of the day increased performance by 23% for one group of employees.

Mnemonics: Use hacks to recall.
Mnemonics: Use hacks to recall.
Wikimedia Commons
When you’re using an acronym or image to recall something, you’re using a mnemonic. The hall of fame includes abbreviations — Roy G. Biv for the colors of the spectrum (Red, Orange, Yellow, Green, Blue, Indigo, Violet) — and rhyming, like “in 1492, Columbus sailed the ocean blue.”

“Mnemonics are not tools for learning per se,” the authors write, “but for creating mental structures that make it easier to retrieve what you have learned.”

Calibration: Know what you don’t know.
Calibration: Know what you don’t know.
Flickr / Strelka Institute for Media, Architecture and Design
When you get feedback that reveals your ignorance to you, you’re calibrating. “Calibration is simply the act of using an objective instrument to clear away illusions and adjust your judgment to better reflect reality.”

This is necessary since we all suffer from “cognitive illusions”: We think we understand something when we really don’t. So taking a quiz — or gathering feedback from a colleague — helps you to identify those blind spots.

For a deeper dig into the science of learning, make sure to pick up “Make It Stick.” It’s an illuminating read.

Retrieval: Bring it back from memory.

Retrieval: Bring it back from memory.

benjamingolub/flickr

When you’re attempting to recall an idea, method, or technique from memory, you’re retrieving. Flash cards are a great example: They force you to recall an idea from memory, unlike a technique like highlighting where you’re not burning anything into your brain. The reason retrieval’s so effective is that it strengthens the neural pathways associated with a given concept.

Retrieval: Bring it back from memory.

Retrieval: Bring it back from memory.

benjamingolub/flickr

When you’re attempting to recall an idea, method, or technique from memory, you’re retrieving. Flash cards are a great example: They force you to recall an idea from memory, unlike a technique like highlighting where you’re not burning anything into your brain. The reason retrieval’s so effective is that it strengthens the neural pathways associated with a given concept.Retrieval: Bring it back from memory.
Retrieval: Bring it back from memory.
benjamingolub/flickr
When you’re attempting to recall an idea, method, or technique from memory, you’re retrieving. Flash cards are a great example: They force you to recall an idea from memory, unlike a technique like highlighting where you’re not burning anything into your brain. The reason retrieval’s so effective is that it strengthens the neural pathways associated with a given concept.

// g?c=a+f+c:(g+=f.length,f=a.indexOf("&",g),c=0<=f?a.substring(0,g)+c+a.substring(f):a.substring(0,g)+c)}return 2E3<c.length?void 0!==d?q(a,b,d,void 0,e):a:c};var ca=function(){var a=/[&\?]exk=([^& ]+)/.exec(r.location.href);return a&&2==a.length?a[1]:null};var t=function(a,b){this.width=a;this.height=b};t.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};var da=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)};var ea=function(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.call(void 0,a[c],c,a)},ga=function(){var a=fa;if(!a)return"";var b=/.*[&#?]google_debug(=[^&]*)?(&.*)?$/;try{var c=b.exec(decodeURIComponent(a));if(c)return c[1]&&1<c[1].length?c[1].substring(1):"true"}catch(d){}return""};var ha=function(a){var b="";ea(a,function(a,d){if(0===a||a)b+="&"+d+"="+encodeURIComponent(String(a))});return b},ia=function(a,b,c){a.google_image_requests||(a.google_image_requests=[]);var d=a.document.createElement("img");if(c){var e=function(a){c(a);a=e;d.removeEventListener?d.removeEventListener("load",a,!1):d.detachEvent&&d.detachEvent("onload",a);a=e;d.removeEventListener?d.removeEventListener("error",a,!1):d.detachEvent&&d.detachEvent("onerror",a)};da(d,"load",e);da(d,"error",e)}d.src=b;a.google_image_requests.push(d)};var ja=function(a,b,c){this.v=a;this.u=b;this.c=c;this.f=null;this.s=this.g;this.A=!1},ka=function(a,b,c){this.message=a;this.fileName=b||"";this.lineNumber=c||-1},ma=function(a,b,c){var d;try{d=c()}catch(g){var e=a.c;try{var f=la(g),e=a.s.call(a,b,f,void 0,void 0)}catch(l){a.g("pAR",l)}if(!e)throw g;}finally{}return d},u=function(a,b){var c=na;return function(){var d=arguments;return ma(c,a,function(){return b.apply(void 0,d)})}};ja.prototype.g=function(a,b,c,d,e){var f={};f.context=a;b instanceof ka||(b=la(b));f.msg=b.message.substring(0,512);b.fileName&&(f.file=b.fileName);0<b.lineNumber&&(f.line=b.lineNumber.toString());a=h.document;f.url=a.URL.substring(0,512);f.ref=a.referrer.substring(0,512);if(this.f)try{this.f(f)}catch(l){}if(d)try{d(f)}catch(l){}d=this.v;try{if((this.A?d.w:Math.random())<(c||d.o)){var g=d.m+(e||this.u)+ha(f),g=g.substring(0,2E3);ia(h,g)}}catch(l){}return this.c};var la=function(a){var b=a.toString();a.name&&-1==b.indexOf(a.name)&&(b+=": "+a.name);a.message&&-1==b.indexOf(a.message)&&(b+=": "+a.message);if(a.stack){var c=a.stack,d=b;try{-1==c.indexOf(d)&&(c=d+"\n"+c);for(var e;c!=e;)e=c,c=c.replace(/((https?:\/..*\/)[^\/:]*:\d+(?:.|\n)*)\2/,"$1");b=c.replace(/\n */g,"\n")}catch(f){b=d}}return new ka(b,a.fileName,a.lineNumber)};var oa=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\u00a0]+|[\s\u00a0]+$/g,"")},pa=function(a,b){return ab?1:0};var ra=Array.prototype.indexOf?function(a,b,c){return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(k(a))return k(b)&&1==b.length?a.indexOf(b,c):-1;for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},sa=Array.prototype.map?function(a,b,c){return Array.prototype.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=k(a)?a.split(""):a,g=0;gparseFloat(a))?String(b):a}(),Ea={},A=function(a){var b;if(!(b=Ea[a])){b=0;for(var c=oa(String(Da)).split("."),d=oa(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f<e;f++){var g=c[f]||"",l=d[f]||"",C=RegExp("(\\d*)(\\D*)","g"),qa=RegExp("(\\d*)(\\D*)","g");do{var m=C.exec(g)||["","",""],N=qa.exec(l)||["","",""];if(0==m[0].length&&0==N[0].length)break;b=pa(0==m[1].length?0:parseInt(m[1],10),0==N[1].length?0:parseInt(N[1],10))||pa(0==m[2].length,0==N[2].length)||pa(m[2],N[2])}while(0==b)}b=Ea[a]=0<=b}return b},Fa=h.document,Ga=Fa&&y?Ca()||("CSS1Compat"==Fa.compatMode?parseInt(Da,10):5):void 0;!z&&!y||y&&9<=Ga||z&&A("1.9.1");y&&A("9");var B=document,r=window;var D=null;function E(a){return"function"==typeof encodeURIComponent?encodeURIComponent(a):escape(a)}var F=function(a,b){ia(a,b,void 0)},Ha=function(){if(!B.body)return!1;if(!D){var a=B.createElement("iframe");a.style.display="none";a.id="anonIframe";D=a;B.body.appendChild(a)}return!0},Ia={};var na;na=new ja(new function(){this.m="http"+("http:"==r.location.protocol?"":"s")+"://pagead2.googlesyndication.com/pagead/gen_204?id=";this.o=.01;this.w=Math.random()},"jserror",!0);var G=function(a,b){return u(a,b)};y&&A("9");!Aa||A("528");z&&A("1.9b")||y&&A("8")||ya&&A("9.5")||Aa&&A("528");z&&!A("8")||y&&A("9");var Ja=function(a,b,c){if("array"==aa(b))for(var d=0;d<b.length;d++)Ja(a,String(b[d]),c);else null!=b&&c.push("&",a,""===b?"":"=",encodeURIComponent(String(b)))},Ka=function(a,b,c){for(c=c||0;c<b.length;c+=2)Ja(b[c],b[c+1],a);return a},La=function(a,b){var c=2==arguments.length?Ka([a],arguments[1],0):Ka([a],arguments,1);if(c[1]){var d=c[0],e=d.indexOf("#");0e?c[1]="?":e==d.length-1&&(c[1]=void 0)}return c.join("")};var Ma=0,H={},Oa=function(a){var b=H.imageLoadingEnabled;if(null!=b)a(b);else{var c=!1;Na(function(b,e){delete H[e];c||(c=!0,null!=H.imageLoadingEnabled||(H.imageLoadingEnabled=b),a(b))})}},Na=function(a){var b=new Image,c,d=""+Ma++;H[d]=b;b.onload=function(){clearTimeout(c);a(!0,d)};c=setTimeout(function(){a(!1,d)},300);b.src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="},Pa=function(a){if(a){var b=document.createElement("OBJECT");b.data=a;b.width=1;b.height=1;b.style.visibility="hidden";var c=""+Ma++;H[c]=b;b.onload=b.onerror=function(){delete H[c]};document.body.appendChild(b)}},Qa=function(a){if(a){var b=new Image,c=""+Ma++;H[c]=b;b.onload=b.onerror=function(){delete H[c]};b.src=a}},Ra=function(a){Oa(function(b){b?Qa(a):Pa(a)})};var Sa={l:"ud=1",j:"ts=0",B:"sc=1",h:"gz=1",i:"op=1"};if(B&&B.URL){var fa=B.URL,Ta=!(fa&&0=b)){var d=0,e=function(){a();d++;db;){try{if(c.google_osd_static_frame)return c}catch(d){}try{if(c.aswift_0&&(!a||c.aswift_0.google_osd_static_frame))return c.aswift_0}catch(d){}b++;c=c!=c.parent?c.parent:null}return null},Ya=function(a,b,c,d,e){if(10<Wa)r.clearInterval(O);else if(++Wa,r.postMessage&&(b.b||b.a)){var f=Xa(!0);if(f){var g={};K(b,g);g[0]="goog_request_monitoring";g[6]=a;g[16]=c;d&&d.length&&(g[17]=d.join(","));e&&(g[19]=e);try{var l=M(g);f.postMessage(l,"*")}catch(C){}}}},Za=function(a){var b=Xa(!1),c=!b;!b&&r&&(b=r.parent);if(b&&b.postMessage)try{b.postMessage(a,"*"),c&&r.postMessage(a,"*")}catch(d){}};var P=!1,$a=function(a){if(a=a.match(/[\d]+/g))a.length=3};(function(){if(navigator.plugins&&navigator.plugins.length){var a=navigator.plugins["Shockwave Flash"];if(a&&(P=!0,a.description)){$a(a.description);return}if(navigator.plugins["Shockwave Flash 2.0"]){P=!0;return}}if(navigator.mimeTypes&&navigator.mimeTypes.length&&(P=(a=navigator.mimeTypes["application/x-shockwave-flash"])&&a.enabledPlugin)){$a(a.enabledPlugin.description);return}try{var b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");P=!0;$a(b.GetVariable("$version"));return}catch(c){}try{b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");P=!0;return}catch(c){}try{b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"),P=!0,$a(b.GetVariable("$version"))}catch(c){}})();var ab=w("Firefox"),bb=xa()||w("iPod"),cb=w("iPad"),db=w("Android")&&!(wa()||w("Firefox")||x()||w("Silk")),eb=wa(),fb=w("Safari")&&!(wa()||w("Coast")||x()||w("Edge")||w("Silk")||w("Android"))&&!(xa()||w("iPad")||w("iPod"));var Q=function(a){return(a=a.exec(v))?a[1]:""};(function(){if(ab)return Q(/Firefox\/([0-9.]+)/);if(y||za||ya)return Da;if(eb)return Q(/Chrome\/([0-9.]+)/);if(fb&&!(xa()||w("iPad")||w("iPod")))return Q(/Version\/([0-9.]+)/);if(bb||cb){var a;if(a=/Version\/(\S+).*Mobile\/(\S+)/.exec(v))return a[1]+"."+a[2]}else if(db)return(a=Q(/Android\s+([0-9.]+)/))?a:Q(/Version\/([0-9.]+)/);return""})();var hb=function(){var a=r.parent&&r.parent!=r,b=a&&0<="//tpc.googlesyndication.com".indexOf(r.location.host);if(a&&r.name&&0==r.name.indexOf("google_ads_iframe")||b){var c;a=r||r;try{var d;if(a.document&&!a.document.body)d=new t(-1,-1);else{var e=(a||window).document,f="CSS1Compat"==e.compatMode?e.documentElement:e.body;d=(new t(f.clientWidth,f.clientHeight)).round()}c=d}catch(g){c=new t(-12245933,-12245933)}return gb(c)}c=r.document.getElementsByTagName("SCRIPT");return 0<c.length&&(c=c[c.length-1],c.parentElement&&c.parentElement.id&&0<c.parentElement.id.indexOf("_ad_container"))?gb(void 0,c.parentElement):null},gb=function(a,b){var c=ib("IMG",a,b);return c||(c=ib("IFRAME",a,b))?c:(c=ib("OBJECT",a,b))?c:null},ib=function(a,b,c){var d=document;c=c||d;d=a&&"*"!=a?a.toUpperCase():"";c=c.querySelectorAll&&c.querySelector&&d?c.querySelectorAll(d+""):c.getElementsByTagName(d||"*");for(d=0;d<c.length;d++){var e=c[d];if("OBJECT"==a)a:{var f=e.getAttribute("height");if(null!=f&&0<f&&0==e.clientHeight)for(var f=e.children,g=0;g<f.length;g++){var l=f[g];if("OBJECT"==l.nodeName||"EMBED"==l.nodeName){e=l;break a}}}f=e.clientHeight;g=e.clientWidth;if(l=b)l=new t(g,f),l=Math.abs(b.width-l.width)<.1*b.width&&Math.abs(b.height-l.height)<.1*b.height;if(l||!b&&10<f&&10<g)return e}return null};var jb,R=0,S="",T=!1,U=!1,V=!1,kb=!0,lb=!1,mb=!1,nb=!1,ob=!1,pb=!1,qb="",rb=0,sb=0,W=0,tb=[],L=null,ub="",vb=[],wb=null,xb=[],yb=!1,zb="",Ab="",Bb=(new Date).getTime(),Cb=!1,Db="",Eb=!1,Fb=["1","0","3"],X=0,Y=0,Gb=0,Hb="",Jb=function(a,b,c){T&&(kb||3!=(c||3)||nb)&&Ib(a,b,!0);if(V||U&&mb)Ib(a,b),U=V=!1},Kb=function(){var a=wb;return a?2!=a():!0},Ib=function(a,b,c){(b=b||ub)&&!yb&&(2==Y||c)&&Kb()&&(b=Lb(b,c),lb?Ra(b):F(a,b),pb=!0,c?T=!1:yb=!0)},Lb=function(a,b){var c;c=b?"osdim":V?"osd2":"osdtos";var d=["//pagead2.googlesyndication.com/activeview","?id=",c];"osd2"==c&&U&&mb&&d.push("&ts=1");S&&d.push("&avi=",S);jb&&d.push("&cid=",jb);d.push("&ti=1");d.push("&",a);d.push("&uc="+Gb);Cb?d.push("&tgt="+Db):d.push("&tgt=nf");d.push("&cl="+(Eb?1:0));""!=qb&&(d.push("&lop=1"),c=n()-rb,d.push("&tslp="+c));d=d.join("");for(c=0;c<vb.length;c++){try{var e=vb[c]()}catch(g){}var f="max_length";2<=e.length&&(3==e.length&&(f=e[2]),d=q(d,E(e[0]),E(e[1]),f))}2E3<d.length&&(d=d.substring(0,2E3));return d},Z=function(a,b){if(zb){try{var c=q(zb,"vi",a);Ha()&&F(D.contentWindow,c)}catch(e){}0<=ra(Fb,a)&&(zb="");var c=b||ub,d;d=q("//pagead2.googlesyndication.com/pagead/gen_204?id=sldb","avi",S);d=q(d,"vi",a);c&&(d+="&"+c);try{F(r,d)}catch(e){}}},Mb=function(){Z("-1")},Ob=function(a){if(a&&a.data&&k(a.data)){var b;var c=a.data;if(k(c)){b={};for(var c=c.split("\n"),d=0;d=e)){var f=Number(c[d].substr(0,e)),e=c[d].substr(e+1);switch(f){case 5:case 8:case 11:case 15:case 16:case 18:e="true"==e;break;case 4:case 7:case 6:case 14:case 20:case 21:case 22:case 23:e=Number(e);break;case 3:case 19:if("function"==aa(decodeURIComponent))try{e=decodeURIComponent(e)}catch(l){throw Error("Error: URI malformed: "+e);}break;case 17:e=sa(decodeURIComponent(e).split(","),Number)}b[f]=e}}b=b[0]?b:null}else b=null;if(b&&(c=new J(b[4],b[12]),L&&L.match(c))){for(c=0;cX&&!U&&2==Y&&Pb(r,"osd2","hs="+X)},Rb=function(){var a={};K(L,a);a[0]="goog_dom_content_loaded";var b=M(a);try{Ua(function(){Za(b)},10,"osd_listener::ldcl_int")}catch(c){}},Sb=function(){var a={};K(L,a);a[0]="goog_creative_loaded";var b=M(a);Ua(function(){Za(b)},10,"osd_listener::lcel_int");Eb=!0},Tb=function(a){if(k(a)){a=a.split("&");for(var b=a.length-1;0<=b;b–){var c=a[b],d=Sa;c==d.l?(kb=!1,a.splice(b,1)):c==d.h?(W=1,a.splice(b,1)):c==d.j?(U=!1,a.splice(b,1)):c==d.i&&(lb=!0,a.splice(b,1))}Hb=a.join("&")}},Ub=function(){if(!Cb){var a=hb();a&&(Cb=!0,Db=a.tagName,a.complete||a.naturalWidth?Sb():I(a,"load",Sb,"osd_listener::creative_load"))}};p("osdlfm",G("osd_listener::init",function(a,b,c,d,e,f,g,l,C,qa){R=a;zb=b;Ab=d;T=f;jb=qa;l&&Tb(l);U=f;1==C?tb.push(947190538):2==C?tb.push(947190541):3==C&&tb.push(947190542);L=new J(e,ca());I(r,"load",Mb,"osd_listener::load");I(r,"message",Ob,"osd_listener::message");S=c||"";I(r,"unload",Qb,"osd_listener::unload");var m=r.document;!m.readyState||"complete"!=m.readyState&&"loaded"!=m.readyState?("msie"in Ia?Ia.msie:Ia.msie=-1!=navigator.userAgent.toLowerCase().indexOf("msie"))&&!window.opera?I(m,"readystatechange",function(){"complete"!=m.readyState&&"loaded"!=m.readyState||Rb()},"osd_listener::rsc"):I(m,"DOMContentLoaded",Rb,"osd_listener::dcl"):Rb();-1==R?Y=f?3:1:-2==R?Y=3:0

Teaching App Development with Swift

Leave a comment

Source: https://swifteducation.github.io/teaching_app_development_with_swift/

Teaching App Development with Swift

Teach Students How to Create iOS Apps

Engage students with a project-based curriculum, and guide students in creating iOS apps. Adopt projects and lesson plans to fit your course and different learning styles. Create real apps that teach students Swift, the iOS SDK, and the Apple developer toolset.

Download Download the Course Materials (~90MB)

GitHub Octocat Report Issues and Contribute on GitHub

Speech Bubble Ask Questions and Share Techniques in the Education Forum

General Materials

Creative students love hands-on learning. Projects lead the lessons, so you can guide and facilitate learning, supporting student work with technical understanding.

Projects and Lesson Plans

Guide students through each level of projects, which provide a progressive framework for learning. Let the app features lead to technical discovery and stimulate student creativity. Select projects and lessons to fit your course requirements and student experience.

Level 1: Xcode Fundamentals and Swift

Level 2: Single View Applications and MVC

Level 3: Frameworks and APIs

Level 4: Navigation, Tab Bar and Table View Controllers

The course materials only, and not any other content of this web page, are to be used pursuant to a Creative Commons license, as specified in the license information within the course materials.

Trademark Information

The Swift logo, Apple, the Apple logo and other Apple trademarks, service marks, graphics, and logos used in connection with the Swift Education project are trademarks or registered trademarks of Apple Inc. in the US and/or other countries. Other trademarks, service marks, graphics, and logos used in connection with the Swift Education project may be the trademarks of their respective owners. You are granted no right or license in any of the aforesaid trademarks, and further agree that you shall not remove, obscure, or alter any proprietary notices (including trademark and copyright notices) that may be affixed to or contained within the Service.

For further information about proper referential uses of the Swift logo, please review the “Guidelines for Using Apple Trademarks and Copyrights”.

Why I want Swift to be your first language

Leave a comment

Source: http://www.aaronblock.com/thoughts/2015/8/21/why-i-want-swift-to-be-your-first-language

In preparation for an upper level class that I’m teaching this semester, I spent the summer writing my first app entirely in Swift. (It’s 7 Second Diet, a meal-tracking app that’s not a pain in the tuchus to use.) After spending some quality time with Swift, I realized how much I want to use Swift to teach introduction to computer science.

Choosing a language

Introduction to computer science is a unique class because most students that enroll in it don’t know if they like computer science or not. As a result, a good intro class does two things: it teaches students the fundamentals of computer science and helps students learn to love computer science. Many of our department’s best majors originally took intro to get their quantitate credit and never left because it was their favorite class. So, when choosing a language for intro, it’s important to pick a one that will:

  • Be intricate enough to cover the core computer science concepts
  • Be robust enough that students can use it for years worth of assignments
  • Be easy enough that students can start programming within one week
  • Be powerful enough that students can make real applications by the end of the first semester

Why Swift

Currently, most departments teach intro in C, C++, Python, or Java. Java is probably the most popular and Python is probably the second most popular. (Our primary language is Java, but we teach some intro classes in Python.) A few other schools will use languages like JavaScript, C#, Smalltalk, Haskell, or Lisp. Every language has its pros can cons and rather than giving you a giant spreadsheet of how each language stacks against Swift, I want to give you a few examples of where Swift really shines in an intro class.

FIRST DAY, REAL CODE.

One trait that Python and Swift both share is that on the first day of class I can type:

print("Hello World")

and everyone in the class immediately understands this code. In Java, when I type:

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

everyone’s eyes glaze over and they think to themselves “what in the hell is going on here?” With Java, C, and C++, you have to spend the first month of class telling students “ignore this” because even simple programs have a lot of syntax overhead. This wastes time and causes some students to discount computer science because “it makes no sense.”

BEGON USELESS SYNTAX.

This is a moment that will happen sometime in the next two weeks. A student will wave me over to her computer with a question about how to fix her broken Java code. When I get to her computer, I’ll immediately point to a line of code and state “You are missing a semicolon here.” The student then swears, “I worked on this for a F!CKING HOUR.” I commiserate and then turn to her neighbor who has exactly the same issue (but he’s been working on it for TWO hours). It’s fun to look like a technopath, but both students wasted their time on silly mistakes. For experts, missing a semicolon is annoying. For intro students, that’s their Japanesse assignment. Swift still has syntax the students will need to know, but they’ve dramatically reduced the amount of “useless” syntax that can trip up students.

TYPES, OPTIONAL BUT NOT FORGOTTEN.

Possibly my favorite thing in Swift is “optional types.” For those who haven’t worked with Swift, an optional type is exactly the same as a normal type, except it can have the additional value of nil, which represents “no value.” I love optional types because they allow me to write algorithms that behave correctly but occasionally don’t return a value. For example, suppose you wanted to find the smallest number in a list of integers. If the list is empty, what value should you return? Should you return 0? Should you throw an exception? Should you return MAX_INT? None of those are correct. Optionals let the students write the algorithm as intended: if the list is empty, return nil.

ALGORITHMS FIRST, OBJECTS SECOND.

Many professors who teach Java like teaching “objects first.” The idea behind “objects first” is that students should learn object-oriented programming first and learn algorithmic reasoning second. I do not like “objects first.” Explaining why I don’t like “objects first” is a post unto itself. So, I’m going to brief here: object-oriented programming is a tool in algorithmic reasoning. It’s better to learn algorithmic reasons first so you can understand why object-oriented programming is necessary.

“Objects first” is a popular technique for teaching Java because (almost) everything in Java is an object. So, to do anything interesting in Java either you have to teach “objects first” or you have to give students a library to hide the object-oriented programming until later in the semester. Either way is messy.

On the other hand, object-oriented programming is a core concept in computer science and needs to be taught to students in their first semester. So any language that doesn’t use object-oriented programming (e.g., C) is a bad choice for an intro language.

Because code can live inside or outside of classes in Python, Swift, and C++, these languages making teaching introduction to computer science a lot less messy.

NAMED PARAMETERS, A LIFE SENTENCE.

Most intro students understand the basics of algorithmic reasoning before they enroll. Where they have difficulty is formalizing an algorithm so that it can run on a computer. The technique I teach them is to write an English description of what you want to happen and then transform it into code where your nouns are represented by variables and verbs are represented by functions. Named parameters make this tranformation cleaner because they allow functions to be more verbose. If you haven’t used named parameters before, the easiest way to explain them is to see an example.

Suppose that you wrote a function that took two lists of integers as parameters and returned the smallest element in the first list of integers that wasn’t included in the second list. Without named parameters, you would call the method like so:

x = findSmallestElementNotIn([20,30,55,22,11,34], [100,23,45,11,20,-4])

With named parameters you would write:

x = findSmallestElement(in: [20,30,55,22,11,34], notIn: [100,23,45,11,20,-4])

The named parameters are the “in:” and “notIn:” included with the parameters. If you had more parameters, then each would have a name as well. By including names with each parameter, the code clearly reads like a sentence:

“Set x to be the smallest element in the list [20,30,55,22,11,34] that is not in [100,23,45,11,20,-4]

Named parameters make the transformation from English to code much easier. Also, when combined with an IDE that has good autocomplete functionality, students can write better code faster.

YOUR REFERENCES MUST BE STRONG TO SURVIVE.

If you know a C programmer and you ask her about Java programmers fresh out of college, then you will hear the following sentence:

“Ugh, kids today just don’t understand how memory is managed. I asked him to write malloc and he looked at me like I was speaking Greek.”

Possibly the biggest problem with Java and Python as first languages is that they obscure memory management. For the types of programs you write in intro, this isn’t bad. However, once you start writing larger programs that need good memory performance it becomes important.

For those who haven’t used Java or Python before, those two languages are at one end of the “memory management continuum.” In these languages, you never explicitly delete a memory reference. Java and Python run “garbage collection” routines that remove memory when they are no longer necessary. On the other end, C and C++ require developers to explicitly destroy memory allocations. Swift uses a technique calledAutomatic Reference Counting (ARC) that lives in the middle. Under ARC, developers do not explicitly destroy objects but instead must correctly organize their memory references and classify them as “strong,” “weak,” or “unowned” so that they can be automatically destroyed without needing to run an additional memory management process. While ARC doesn’t require developers to directly manage memory, it helps students learn how to organize memory and think about how objects are stored in memory without harassing them about the details. (Students should still learn explicit memory management, just not in their first year.)

Where Swift could improve.

With Swift 2.0 coming out soon, most of my complaints about Swift are going away. That being said my biggest complaint about Swift is that it lacks Python’s simple input() and read() commands. (If you haven’t use Python before: input() prompts the user for an input and returns a string, and read() will take the contents from a file and return it as a string.) Having access to simple user/file input dramatically expands the set of examples and assignments I can present in the first month of intro. I can work around this by providing students with a library that would include my implementation of these two methods. The downside is that now I’m teaching the students my code and not a technique they can apply outside of the classroom. While this would work, it isn’t ideal.

Why don’t I use Swift this year?

Even though I think Swift is ideally suited for intro, for the next year at least, I’ll be using Java in my classes. Why?

  1. The AP test is in Java. This is the biggest reason. Each year we have several students who took high school computer science, got a 4 or 5 on the AP, and want to skip the first semester. We want to make sure they can do that without taking summer school. Because we want students to have the same language for their entire first year, if we use Swift, then those students can’t skip the first semester.
  2. Language in flux. Given how much change has happened in Swift during the past year, I’m hesitant to teach intro students how to program in a language that could have changing syntax.
  3. No Windows IDE, yet. The fact that Swift is now open source is wonderful. I look forward to the day when we have great a IDE on Windows. That isn’t the case right now. While we have Macs in our labs, students like working at home and they don’t all have Apple laptops. Even if some projects have to be built on lab computers, we’d like to be as flexible as possible.
  4. This isn’t a a decision I can make by myself. Every class in computer science builds off of the last class. So, if we change our introlanguage, then nearly every other class in our department will need to change as well. Just because I’m excited about Swift for intro doesn’t mean it’s the best decision for our department. Every year we revaluate how we teach and how we can better serve our students. I expect that this year we’ll have a lot of great discussions about the pros and cons of Swift, Java, and Python.

Conclusion

I could go on describing the advantages of Swift and Xcode in an intro class for a long time (the ease of use Interface Builder, the use of let make constants a first class principal…) but this has gone on long enough. Ultimately, I want to use Swift as the language in introduction to computer science because it allows me to teach all the key concept I want to teach; it is easy enough that students can start using it on day one; it’s sufficiently strict that it keeps students in line so they won’t make (as many) stupid mistakes; and it’s powerful enough that students can use it for the next decade without a problem. While I’m not going to teach introduction to computer science with Swift right now, I am ecstatic about the future of Swift and the impact it will have on future computer scientists.

Share
Aaron Block is an assistant professor of computer science at Austin College. In another lifetime, he was a program manager at Microsoft.

Older Entries