Even Catfish Can Code

16.12.2009

Предметы. Часть 1. Introduction to Programming

Introduction to Programming – Введение в программирование – Алгоритмизация и языки программирования

Данная дисциплина есть во всех университетах, на всех специальностях связанных с IT. Курс по сути является введением в программирование, которое обычно является самым важным умением программиста. За семестр студенты обучаются основам какого-либо языка программирования:

  • переменные, типы данных
  • ввод и вывод данных
  • ветвление
  • циклы
  • массивы
  • функции
  • классы и структуры
  • работа с файлами
  • и тп.

и знакомятся с  простыми алгоритмами как:

  • нахождение суммы, произведения элементов массива
  • нахождение минимума, максимума в массиве
  • сортировка и бинарный поиск
  • и тп.

Бывают вариации в зависимости учебной программы университета.

Самое интересное связанное с этой дисциплиной, это язык программирования на котором строится программа. В пост-СССР странах популярным выбором был Pascal (Паскаль).

Паскаль был создан Никлаусом Виртом в 1968-69 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Он был опубликован в 1970 году Виртом как небольшой и эффективный язык, чтобы способствовать хорошему стилю программирования, использовать структурное программирование и структурированные данные.

Паскаль плох тем, что в современной разработке за рубежом Паскаль практически не используется.

Другие популярные языки для обучения данной дисциплины это — C, C++, Java. Все  три языка похожи, но Java требует ООП подхода в коде, что может сбить с толку по началу. Также в Java нет указателей, что облегчает задачу при учебном процессе, но может быть готовит не самых сильных программистов. Joel Spolsky и Paul Graham уже высказались против использования Java в ВУЗ-ах.

В MIT, как и в некоторых других ВУЗ-ах, курс “введение в программирование” используют язык Scheme(диалект языка Lisp) и учебник написанной специально для этого курса.

При разработке Scheme упор был сделан на элегантность и простоту языка. Философия языка подчёркнуто минималистская. Его цель — не сваливать в кучу разные полезные конструкции и средства, а напротив — удалить слабости и ограничения, вызывающие необходимость добавления в язык новых возможностей. В результате, Scheme содержит минимум примитивных конструкций и позволяет выразить все, что угодно путём надстройки над ними.

Язык не самый практичный в индустрии, но популярный в разработке искусственного интеллекта и некоторых других проектов.  Joel Spolsky любит Lisp за функциональное программирование. Paul Graham может хвалить Lisp очень очень долго.

Впрочем, несмотря на достоинства Lisp-а, MIT с 2008-го года сменила свой курс основанный на Scheme на 3 курса основанные на Python. Вот почему MIT решили сменить свой курс:

Costanza asked Sussman why MIT had switched away from Scheme for their introductory programming course, 6.001. This was a gem. He said that the reason that happened was because engineering in 1980 was not what it was in the mid-90s or in 2000. In 1980, good programmers spent a lot of time thinking, and then produced spare code that they thought should work. Code ran close to the metal, even Scheme — it was understandable all the way down. Like a resistor, where you could read the bands and know the power rating and the tolerance and the resistance and V=IR and that’s all there was to know. 6.001 had been conceived to teach engineers how to take small parts that they understood entirely and use simple techniques to compose them into larger things that do what you want.

But programming now isn’t so much like that, said Sussman. Nowadays you muck around with incomprehensible or nonexistent man pages for software you don’t know who wrote. You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts. This is a fundamentally different job, and it needed a different course.

So the good thing about the new 6.001 was that it was robot-centered — you had to program a little robot to move around. And robots are not like resistors, behaving according to ideal functions. Wheels slip, the environment changes, etc — you have to build in robustness to the system, in a different way than the one SICP discusses.

And why Python, then? Well, said Sussman, it probably just had a library already implemented for the robotics interface, that was all.

Впрочем это тоже не так уж плохо. Paul Graham считает, что Python лучше чем Java.

Остается лишь добавить, что какой бы язык вы не изучали, самое главное — умение решать задачи поставленные перед вами, а во многом  это зависит не от языка, а от вашей практики и способности. Также, своевременное изучение и понимание этой дисциплины критично для последующего успешного обучения.

11.12.2009

Предметы. Часть 0

Filed under: 1 — dantkz @ 11:47
Tags: , ,

Я буду писать цикл статей(постов) о важности, нужности и полезности каждого предмета, которые преподают студентам IT специальностей.
Для начала список предметов:

  • Introduction to Programming(Введение в программирование)
  • Calculus(Математический анализ)
  • Linear Algebra(Линейная алгебра)
  • Physics(Физика)
  • Foundations of Electrical Circuits(Теория электрических цепей)
  • Discrete Mathematics(Дискретная математика)
  • Mathematical Logic(Математическая логика)
  • Object-oriented Programming with XXX(Объектно-ориентированное программирование на языке XXX)
  • Graph Theory and Boolean Algebra(Теория графов и Булева алгебра)
  • Probability Theory and Mathematical Statistics(Теория вероятностей и математическая статистика)
  • Analog Electronics(Анологовая электроника)
  • Assembly Language(Программирование на языке ассемблер)
  • Formal Languages and Automaton (Формальные языки и автоматы)
  • Systems Control Analysis (Анализ систем управления)
  • Digital Electronics (Цифровая электорника)
  • Data Structures and Algorithms (Структуры данных и алгоритмы)
  • Artificial Intelligence (Искусственный интеллект)
  • Machine Learning (Машинное обучение)
  • Computer Networks (Компьютерные сети)
  • Operating Systems (Операционные системы)
  • Computer Organization and Design (Строение компьютеров)
  • Computer Architecture (Архитектура компьютеров)
  • Compilers (Компиляторы)
  • Fundamentals of Databases (Основы баз данных)
  • Fundamentals of Signal Processing (Основы обработки сигналов)
  • Computer Graphics (Компьютерная графика)
  • Software Engineering (Разработка программного обеспечения)
  • Digital Image Processing (Цифровая обработка изображений)
  • Human-computer interaction (Взаимодействие человека с компьютером)
  • Web-programming (Веб-программирование)
  • Data Mining (Интеллектуальный анализ данных)
  • Pattern Recognition (Распознавание образов)
  • Neural Networks (Нейронные сети)
  • Parallel and Distributed Computing (Параллельные и многопроцессорные вычисления)

Название курсов могут не совпадать в разных университетах и на разных специальностях. Также некоторые курсы могут быть элективными, или не быть в университете вообще.

Тема: Rubric. Блог на WordPress.com.

Follow

Get every new post delivered to your Inbox.