“A computer is like a violin. You can imagine a novice trying ﬁrst a phonograph and then a violin. The latter, he says, sounds terrible. That is the argument we have heard from our humanists and most of our computer scientists. Computer programs are good, they say, for particular purposes, but they aren’t ﬂexible. Neither is a violin, or a typewriter, until you learn how to use it.”
- Marvin Minsky
The world is moving from a phase where technology changed the way we do things to a phase where technology is changing what we believe is possible. A creative approach here involves programing, but will often go beyond this; finding situations where computing empowers, making information accessible where it matters and implementing solutions using available technological resources.
Being able to engage with code and hardware enables the ability to creatively and effectively apply these to other disciplines (which could be as diverse as manufacturing, medicine, urban planning, sustainability, animation, government, biology, history, education, art, design,…).
Students is this course will be encouraged not only to gain proficiency in programming, but also to think about wider issues around the use of technology – open source vs proprietary, privacy and security.
In a rapidly changing field, an effective program must build the capability to learn independently (using documentation, online tutorials, forums,…) so as to be able to use and apply current technology at any point of time. This principal will guide both the content of the program as well as the learning approach.
The program assumes no prior coding experience and will begin with the basics of computer programming. The core content of the program will focus on:
- The mathematical and statistical constructs that underlie algorithms.
- Coding for the web and mobile platforms.
- Reusing code (API’s and libraries) to build applications.
- The management and manipulation of content, data and media.
The Creative Coding course run at the Bangalore campus will lean towards:
- Physical computing – writing code for microprocessors, the use of external sensors and the actuators beyond the device and working with networked sensors (Internet of Things - IoT)
- Technology in Education – understanding and implementing the use of technology in curriculum.
- Data Science – understanding data logging, analysis, manipulation and visualization using statistical and computing methods.
This program is flexible, accommodating students from a variety of backgrounds (in terms of prior experience) and providing training that is relevant to a spectrum of employment and higher education opportunities, while simultaneously developing specific capabilities according to the occupational standards that have been articulated by the Sector Skills Councils (both NASSCOM in India as well as the Sector Skills Councils of the UK and Australia).
Specific opportunities and capabilities are described in the table at the end of this page.
Physical computing: Involves working with and programming microprocessors (combined with appropriate sensors / actuators) to design and make objects. Networking such objects so that they are able to ‘talk’ to each other is an emerging field, and the ubiquity of these seems certain in the near future. Such objects could be used to do specialized jobs like data-logging or automation, or to build exhibits and installations.
Education: In this area, graduates of the Creative Coding course can work in a number of roles
- building platforms for young people to interact and learn
- designing and planning activities which help learners to code and use technology
- evaluate and set-up infrastructure that works in an educational set-up (often where there are constraints on resources)
App development: Develop web and mobile apps in a variety of situations and build appropriate features (such as content management, e-commerce, media viewing etc.) depending on requirements. This would involve both client and server side work.
Data Science: This involves both visualizing data sets (typically large ones) as well as finding patterns. Applications of this are varied, from machine learning and bioinformatics to analytics and routing applications. When these applications need to perform in real-time, the programming involved goes beyond the underlying mathematical theories.
This course is designed to be modular with entry and exit points at the end of each year, with each year aiming to give students a definite set of capabilities as outlined below. The structure of the course is designed to train students to learn new technologies as they need them, and to work in a collaborative manner. Learning engagements will be of the following kinds:
- Theory sessions, which includes master classes and interactions which could be face-to-face, on Skype or as webinars.
- Tutorials where students will learn by working on given tasks, with short periods of instruction to learn specific techniques or ideas.
- Practical sessions in a studio setting– where students will use techniques they have learnt to work on pieces of software which might require the reuse of code in the form of libraries and API’s.
- Portfolio – which would include software designed, and could include a GitHub account with contributions made to others’ projects.
- Self-study sessions where students will need to use documentation, online resources and forums to learn specific topics. This would include taking short online courses (when such are available) and working on open-source projects.
- Learning from peers and exposing topics to one’s peers in the form of short seminars.
- Linkages: Attending events in the IT community which focus on specific tools and build network with others in the field.
- Apprenticeships with both people working in the industry as well as with people working in fields which use coding to accomplish tasks
- Projects at the end of each year which may require the use of collaborative tools and will require documentation in appropriate technical language.
The course begins by focusing on the basic ideas of computer programming. At this point Python is used as the primary language to learn basic programming ideas with. Simultaneously the course will explore the basics of Linux and the use of the command line. Using freely available resources such as forum articles and blog posts from the internet to setup computers will be looked at. Another thread that will begin in this semester is the basics of programming hardware such as the Arduino.
The second semester will introduce programming for the web – both coding as well as using Content Management Systems and frameworks. The features that websites usually require will be explored at this time. Exploratory data analysis- both using software as well as writing programs to perform specific tasks- will be explored.
Through the second semester, the course will also introduce a set of mathematical ideas that are ubiquitous in computer programming such as (2 and 3 dimensional) vectors and transformations and laws of motion, as well as how these are used in computer graphics.
The first year looks at
- Using basic programming constructs and structures
- Finding and using libraries/modules as required (after evaluating options to find the best choice) to code software
- Familiarity with the modalities of setting up a system based on Linux and installing software on it, taking care of dependencies
- Exploring data from the point of view of analytics and visualization.
The third semester continues the threads introduced in the first year. Understanding and programming web and mobile apps; and learning how the various components work – both on the server as well as on the device will be one of the strands that the course will focus on. A deeper exposure to physical computing – both using actuators of various kinds as well as applying microprocessors to log data will also be looked at. Another strand will look at extensions of databases to situations that have a spatial aspect (Geographical Information Systems).
The fourth semester looks at two applications of computer programming; one of which is how 2d and 3d modeling is done and the process by which such models are converted into data usable for digital fabrication. The role of technology in education, and ways to make applications and platforms that are appropriate for use by children will be explored here. This includes hardware devices such as probes and sensors, as well as software to log data or platforms on which learning could be shared.
Through this semester, ideas from mathematics and statistics that are relevant to data science and graphical applications will be explored – these will include random variables and ways to generate them, interpolation techniques applied both in numerical and graphical contexts and the use of linear regression models.
The second year looks at
- A variety of contexts in which computing is used such as GIS and spatial data, 2d and 3d modeling and physical computing
- Using the mathematics underlying common algorithms to implement them
- Basic statistical procedures and know how to implement them to analyze data and create predictive models.
Year 3 (Degree):
The fifth semester is designed to expose students to a variety of application areas of coding. Introducing computation into media and manipulating it is a large field of application of computers, both commercially as well as otherwise. General principles will be introduced, and specific examples (which will vary from year to year) will be looked at. Other applications to areas such as computer vision, artificial intelligence, machine learning, natural language processing etc. will be also introduced in a ‘Topics’ course. This will also look at existing algorithms and implementation of these using appropriate libraries. Alongside these, an exposure to the mathematics underlying many computer algorithms such as graph theory and linear algebra will be provided.
The final semester will consist of a Capstone – a project which is chosen in consultation with faculty and executed by the student, with clear phases marked along a timeline.
Completion of the degree involves
- The tools required to implement fairly intensive computation in some application domains
- Building parts of a network of connected objects (IoT)
- Using computational tools to manipulate media of various forms.
After 1st year
Proficient in programming in at least one language. Be able to use libraries / modules as required. Design and code for the web. Setup and personalize a computer to work with Linux.
Write scripts/plug-ins to perform specific tasks where requirements are clear. Assist in exploring data for basic analytics / visualization. Implement web-site/web apps.
After 2nd year
Understand and use sensors for a variety of tasks. App programming – client and server side. Working with spatial and geo-located data.
Provide specialized services to enterprises / institutions (scientific/educational). Code mobile apps. Use computational tools (both statistical and visual) to model and understand data. Code and make the relevant electronic components for making exhibits/installations.
After 3rd year
Apply of computational thinking to various media. Using API's of various kinds – their structure and application. Sensors and networks
Code and debug programs, often starting with an ambiguous problem statement. Provide implementation for visualization/analysis/analytics for data arising from behaviors with spatial and temporal aspects. Design and make micro-controller based networked devices that perform specific tasks.
For further information, kindly email Gautham Dayal at email@example.com