Минимальные знания CompSci, необходимые для написания настольных приложений - PullRequest
1 голос
/ 17 декабря 2008

Будучи программистом-любителем в течение 3 лет (в основном Python и C) и никогда не создавая приложения длиной более 500 строк кода, я столкнулся с двумя вариантами:

(1) Изучите основы структур данных и разработки алгоритмов, чтобы я мог стать компьютерным ученым 133 года.

(2) Изучите Qt, который помог бы мне создавать проекты, которые я жаждал , чтобы строить в течение длительного времени.

Для изучения (1) каждый, кажется, рекомендует читать CLRS. К сожалению, чтение CLRS заняло бы у меня как минимум год обучения (или больше, я не Питер Круминьш). Я также понимаю, что для выполнения любой умеренно сложной задачи с использованием (2) мне нужно будет понять хотя бы основы (1), что подводит меня к моему вопросу: предполагая, что я использую C ++ в качестве языка программирования какие части CLRS дадут мне достаточно знаний об алгоритмах и структурах данных для работы над большими проектами с использованием (2)?

Другими словами, мне нужен список теоретических тем CompSci, абсолютно необходимых для повседневных задач прикладного программирования . Кроме того, я хочу использовать CLRS в качестве удобного справочника, поэтому я не хочу пропускать какие-либо материалы, имеющие решающее значение для понимания последующих разделов книги.

Не поймите меня неправильно здесь. Дискретная математика и теоретические основы CompSci были в моем списке «TODO: URGENT» уже около 6 месяцев, но у меня просто не хватает времени из-за работы в колледже. По прошествии длительного времени у меня есть 15 выходных, чтобы делать все, что мне нравится, и я хочу потратить эти 15 дней на создание приложений, которые я действительно хочу создавать, а не сидеть за столом, ручкой и бумагой рука, пытаясь записать решение проблемы из учебника.

(Кстати, ресурс «меньше математики - больше кода» по алгоритмам будет высоко оценен. Я только что закончил среднюю школу, и моя математика не на том уровне, который должен быть.)

Спасибо:)

Ответы [ 8 ]

7 голосов
/ 17 декабря 2008

Это можно считать ересью, но подавляющее большинство кода приложения не требует большого понимания алгоритмов и структур данных. Большинство языков предоставляют библиотеки, которые содержат классы коллекций, алгоритмы поиска и сортировки и т. Д. Как правило, вам не нужно понимать теорию, лежащую в основе их работы, просто используйте их!

Однако, если вы никогда не писали ничего длиннее 500 строк, вам нужно изучить много вещей, таких как, как написать код вашего приложения, чтобы он был гибким, поддерживаемым и т. Д.

2 голосов
/ 17 декабря 2008

Попробуйте несколько онлайн-курсов по компьютерным наукам. Беркли есть, как и MIT. Радио разработки программного обеспечения - также отличный подкаст.

См. Также эти вопросы:

Какие хорошие компьютерные ресурсы для слепого программиста? https://stackoverflow.com/questions/360542/plumber-programmers-vs-computer-scientists#360554

2 голосов
/ 17 декабря 2008

Чтобы получить меньше математического кода, больше ресурсов кода по алгоритмам, чем CLRS, посмотрите Алгоритмы в двух словах . Если вы собираетесь писать настольные приложения, я не считаю CLRS обязательным чтением. Если вы используете C ++, я думаю, Sedgewick является более подходящим выбором.

1 голос
/ 17 декабря 2008

Прислушайтесь к мудрости Дона и просто сделайте это . Можете ли вы определить функции, которые вы хотите, чтобы ваше приложение имело? Можете ли вы разбить эти функции на более мелкие задачи? Можете ли вы организовать код, созданный этими задачами, в целостную структуру?

Конечно, вы можете. Определите любые «рискованные» области (области, которые вы не понимаете, например, требующие больше математики, чем вы знаете, или специальные алгоритмы, которые вам придется исследовать), либо найдите другое решение, создайте прототип решения или вернитесь в SO и спросите конкретные вопросы.

0 голосов
/ 17 декабря 2008

Я бы сказал, что практические аспекты кодирования более важны. В частности, контроль источника жизненно важен, если вы его еще не используете. Мне нравится bzr как простая в настройке и использовании система, хотя поддержка графического интерфейса не так развита, как могла бы.

Затем я перейду к одному или обоим классическим материалам о мастерстве кодирования, а именно

Вы также можете ознакомиться с списком рекомендуемых книг по переполнению стека .

0 голосов
/ 17 декабря 2008

Это все равно, что сказать, что вы хотите переехать во Францию, поэтому вы должны выучить французский из книги и какие слова необходимы - или вы просто отправляетесь во Францию ​​и узнаете, какие слова вам нужно знать из опыта и из копирования местные жители.

Написание кода является частью обучения информатике. Я писал код задолго до того, как услышал этот термин, и многие люди писали код еще до того, как этот термин был изобретен.

Кроме того, вы говорите, что жаждете написать определенные приложения. Этому нельзя научить, так что просто иди и делай это. Некоторые вещи вы узнаете только на практике.

(Теоретические основы просто дадут вам более глубокое понимание того, что вы в конечном итоге делаете, что в основном будет копировать подходы других людей. Единственное предостережение в том, что в некоторых случаях теоретические вещи скажут вам, что бесполезно пытаться - Например, если один из ваших зудов - решить полную проблему NP, у вас, вероятно, не получится: -)

0 голосов
/ 17 декабря 2008

Я должен сказать, что сидеть с сухим старым учебником и читать его - не способ научиться делать что-либо эффективно, даже если вы делаете заметки. Делать это - лучший способ учиться, используя учебники в качестве справочного материала. Действительно, используя такие сайты, как это.

Что касается структур данных - узнайте, какая из них подходит для любой ситуации, которую вы видите: Наборы (отсортированные и несортированные), Списки (ArrayList, LinkedList), Карты (HashMap, TreeMap). Сложность выполнения базовых операций - добавления, удаления, поиска, сортировки и т. Д. Это поможет вам выбрать подходящую структуру данных библиотеки для использования в вашем приложении.

А также убедитесь, что вы достаточно тепло с MVC - т.е. убедитесь, что ваша модель отделена от вашего вида (интерфейс QT) как можно лучше. Лучше всего было бы, чтобы модель и алгоритмы работали сами по себе, а затем поместили GUI поверх. Или юнит тест сверху. Etc ...

Удачи!

0 голосов
/ 17 декабря 2008

Переход от 500 loc к реальному (даже маленькому) приложению - это не так просто. Как указывал Дон, вам нужно много чего узнать о коде (гибкость, повторное использование и т. Д.), А также о некоторых элементах управления конфигурацией (безопасный визуальный источник, SVN?)

Но главная проблема в том, что вам нужен способ не быть перегруженным вашей функциональностью / кодовой парой. Это не так просто. Я могу предложить вам кое-что для «автоматического» тестирования вашего кода (даже самым простым способом) с помощью некоторых регрессионных тестов. В противном случае это будет трудно.

Как вы видите, я думаю, что это никак не связано со структурой данных, алгоритмами или чем-то еще.

Удачи и дайте нам знать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...