Программист на C++, надеющийся расширять перспективу

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

19
задан sivabudh 17 October 2009 в 20:39
поделиться

18 ответов

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

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

  1. Atari Basic - Круто Я могу заставить свой компьютер делать почти все, но у меня постоянно исчерпывается лимит памяти 8 КБ (или у меня заканчиваются номера строк)!
  2. Логотип - Без номеров строк . Я могу постепенно строить и запускать свои программы (позже я видел это в Lisp, Scheme и Forth)
  3. Pascal - он похож на Basic, но с большей функциональностью (без номеров строк).
  4. C - Так что ' Что такое указатели (теперь я понимаю, заглядывать и тыкать).
  5. Сборка - Ах, вот почему C разработан таким, какой он есть. С таким же успехом я мог бы просто использовать C вместо сборки.
  6. C ++ - Объекты - отличный способ структурировать мою программу в логические блоки
  7. BASH - Программирование с потоком (фильтры , исходники и приемники) могут быть очень мощными
  8. PostScript - Шрифты - это программы! Стековое программирование - очень мощная парадигма .
  9. Пролог - Таким образом, вы можете просто написать несколько ограничений и заставить компьютер сам выработать ответ. Но, черт возьми, трудно понять, какие ограничения заставляют его делать то, что я хочу!
  10. Perl - Неважно, если люди не знают всех правил. Я полагаю, что некоторые языки созданы так, чтобы их было легче писать, чем читать.
  11. SQL - Какой удобный способ запрашивать данные. Это напоминает мне Пролог. (позже это напоминает мне функциональное программирование).
  12. Lisp - Таким образом, вам не нужно ручное управление памятью, чтобы создавать связанные списки ! (Заметьте, я не тратил достаточно времени на Лисп. С его помощью можно было бы извлечь много более поздних уроков.)
  13. Object Pascal - Круто, в Паскале тоже могут быть объекты.
  14. Modula-2 - Странно, это похоже на Паскаль.
  15. Simula-67 - Хммм ... так откуда пришли объектно-ориентированные языки?
  16. Java - Все может быть объектом (Позже я узнал, что объектами может быть еще больше вещей, см. Smalltalk ниже), а код можно скомпилировать один раз и запустить на разных платформах. Другие прозрения, которые у меня были: интерфейсы - отличный способ создания программного обеспечения и сборка мусора действительно мощная .
  17. Delphi - Ничего себе, библиотеки GUI могут быть простыми в использовании. События - это потрясающая абстракция .
  18. Шаблоны C ++ - Написание кода во время компиляции - чрезвычайно эффективный инструмент (см. Scheme и Lisp).
  19. Функторы и связыватели C ++ - Передача функций функциям - это мощный инструмент , но синтаксис ужасен. (На самом деле это был мой первый реальный опыт функционального программирования, очевидно, что большинство языков делают это лучше).
  20. JavaScript - Прототипы и функции eval действительно мощные .
  21. XSLT - я не могу поверить, что это полный Тьюринг. Это должно быть то, что происходит, когда учёные становятся плохими.
  22. Eiffel - Контракты - отличный способ выразить проектные предположения и требования .
  23. AspectJ - Межсекторальные проблемы имеют смысл, и это правда, что их трудно выразить в других OOPL . Но идентификация их по имени функции кажется уловкой?
  24. Scala - Поля и методы одинаковы . Функции высшего порядка писать просто. Компилятор может угадывать тип простых выражений (но не шаблонов). Объектный код может быть намного проще. Сопоставление с образцом - это удобно, но когда их использовать? Черты и сочетания даже лучше, чем интерфейсы .
  25. C # - это похоже на Delphi, смешанный с C ++ и Scala. Я могу обдумывать все во время выполнения и даже легко писать код.
  26. D - Вот как выглядит объединение модульного тестирования с проектированием по контракту и множеством других вещей при сохранении менталитета C ++.
  27. Smalltalk - Didn ' Я действительно выучил это, но программисты Smalltalk примерно в это время указали мне, что в Smalltalk все действительно было объектом (упаковка / распаковка не требуется), включая блоки кода.
  28. LINQ - SQL - это просто функциональное программирование.
  29. Lua - Все может быть столом! Звучит как JavaScript, но его легче встроить.
  30. ML - Когда вы используете только шаблоны, вы можете написать много кода намного проще.
  31. Лямбда-исчисление - Так вот откуда пришли Лисп и функциональное программирование .
  32. Схема - Генерация кода во время компиляции может быть очень простой задачей . Это действительно легко расширить. Числовая обработка может быть выполнена очень хорошо. Функции, удерживающие состояние, - это мощно. Продолжения аккуратные, но мне все равно.
  33. Фринк - Я никогда не понимал, что единицы измерения могут быть такими сложными.
  34. Джой - Это самый короткий код, который я когда-либо видел . Это самый недооцененный язык.
  35. Комбинаторная логика (SKI-Calculus) - Вам не нужны аргументы, но вместо них можно использовать комбинаторы. К счастью, это то же самое, что лямбда-исчисление для Лиспа .
  36. Haskell - Я бы хотел, чтобы мой код компилировался. Стандартная прелюдия к Haskell должна быть одной из самых элегантных библиотек, которые я когда-либо видел .
  37. Factor - Там так много крутых вещей, я просто хочу, чтобы меня беспокоили чтобы изучить синтаксис.
  38. K - Примитивные операции на основе массивов (векторов) чрезвычайно эффективны .
  39. Форт - это похоже на сверхмощную сборку высокого уровня. Однако есть чему поучиться.
  40. Python - Это действительно читаемый материал. Это как сочетание множества других языков.
  41. Erlang - Выражение программ как субъектов - отличный способ выразить параллелизм.
  42. Исполняемый UML - Асинхронная передача сообщений - отличный способ выразить параллельные алгоритмы, не думая о потоках .
  43. Ruby - Системы сборки ( Rake ) могут быть написаны на реальном языке программирования. Блоки кода тоже могут быть данными (технически я научился этому с помощью Scala).

Так что, конечно, этот список намного длиннее, чем вам (или кому-либо еще), вероятно, хотелось бы. Для максимального эффекта мой короткий список будет следующим: Scheme (или Lisp), Joy (или PostScript), Erlang, Eiffel, AspectJ, Erlang, ML и Haskell. Если вы хотите сосредоточиться только на паре языков и хотите углубиться в них, тогда вы можете многого добиться от освоения Scala или C #. Конечно, есть еще кое-что, чему вы могли бы научиться у C ++ 0x, особенно если вы немного подтолкнете его.

41
ответ дан 30 November 2019 в 01:46
поделиться

Ruby must be the one that makes me say "Cool look how you can do that" the most. But I have a new found fondness for JavaScript again.

1
ответ дан 30 November 2019 в 01:46
поделиться

Пролог является обязательным. Любой другой язык другой парадигмы был бы хорошим началом. Пролог представляет собой логическую парадигму. Еще один отличный, но совершенно другой язык - Scheme. Он принадлежит к семейству функциональных языков.

Вот несколько примеров валидатора Palindrome.

РЕДАКТИРОВАТЬ: Кто-то упомянул, что написанный мной код не впечатляет и обескураживает. Вот несколько упрощенных примеров:

Факториал схемы


 (define (fact n)
    (if (= n 0)
        1
        (* n (fact (- n 1)))))

Факториал пролога


factorial(0,1). 

factorial(N,F) :-  
   N>0, 
   N1 is N-1, 
   factorial(N1,F1), 
   F is N * F1.

И мои оригинальные примеры:

Пример пролога:


:- set_prolog_flag(toplevel_print_options, [quoted(true), portray(true), max_depth(0), attributes(portray)]).


readline(Line) :-
 get0(Ch),
 readline(Ch, Line),
 !.

readline(10, []).

readline(Ch, [LowerCasedCh | RestOfLine]) :-
 is_alpha(Ch),
 name(N, [Ch]),
 downcase_atom(N, LowerCasedN),    
        %Drops element down to lowercase
 name( LowerCasedN, [LowerCasedCh]),
 get0(NextCh ),
 readline(NextCh, RestOfLine).

%Character Trimming

readline(Ch, RestOfLine) :-
 \+is_alpha(Ch),
 get0(NextCh ),
 readline(NextCh, RestOfLine).



palindrome:-
 readline(List),
 sarahPalindrome(List).


sarahPalindrome(List):-
 reverse( List, ReversedList),
 List = ReversedList.
 

Вот решение в схеме для той же проблемы!


(define palindrome
  (lambda (x)
     (equal? (filter-non-char-alpha (reverse (string->list x))) (filter-non-char-alpha (string->list x))
    )
  )
)
(define filter-non-char-alpha
  (lambda (x)  
        (if (equal? x '()) #t 
                    (if (char-alphabetic? (car x)) 
                        (cons (char-downcase (car x)) (filter-non-char-alpha (cdr x)))
                        (filter-non-char-alpha (cdr x)) 
                    )
        )
   )
)

2
ответ дан 30 November 2019 в 01:46
поделиться

Недавнее "Это так круто!" для меня была Scala. Он прекрасно сочетает в себе функциональное программирование, объекты и потоки, и все это работает в JVM.

Для меня это была первая действительно крутая вещь, которую я ' Я видел, что это связано с Java. :)

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

2
ответ дан 30 November 2019 в 01:46
поделиться

Python может быть ответом.
Он может улучшить ваше мышление и дизайн на C ++ и научит вас некоторым новым идеям и методологиям, таким как функциональное программирование.
Поначалу "утка" может показаться странным и проблематичным, но у него есть свои преимущества.
И вы можете в конечном итоге использовать его даже в производственных целях

Другой вариант - попытаться написать «hello world» в brain fu_k . Может быть, это не лучшее использование для вашего времени, но после этого вы никогда не будете пробовать эту штуку "расширения перспективы" :)

3
ответ дан 30 November 2019 в 01:46
поделиться

C ++ все время "ухауууууууууууууууууууууууууууууууууу" все время ... и каждые несколько лет или около того в невероятных приложениях.

Если бы мне пришлось выбрать что-то еще, что так же неправильно понимается и легко обманывается, но невероятно в выражении, конечно, просто: JavaScript.

Следующим ведущим и полезным индикатором снова, очевидно, является фаворит Google, Python, но они переходят к двум вышеперечисленным более быстрыми темпами, чем когда-либо прежде.

0
ответ дан 30 November 2019 в 01:46
поделиться

Я программировал на Pascal, Delphi, Assembly, C, C ++, Scheme, Lisp, Java, C # и CUDA.

C # - это ответ - вы можете писать чрезвычайно динамичные программы, используя отражение, и WPF действительно ставит C # на передний план.

1
ответ дан 30 November 2019 в 01:46
поделиться

Сборка (которую я изучил до C ++ и использовал для написания обработчиков прерываний TSR под DOS): мне нравилось иметь иллюзию знания, что на самом деле делает машина.

C # тоже изящен. : Синтаксис указателя на член в C ++ настолько запутан, что анонимные делегаты C # сравнительно забавны (мы получим нечто подобное в следующей версии C ++).

4
ответ дан 30 November 2019 в 01:46
поделиться

Во-первых, хорошо, что вы ищете что-то новое! Если вы готовы к этому, это отличная возможность попробовать что-то, что работает совершенно по-другому, хотя бы для того, чтобы расширить ваше понимание того, как все работает. Я бы повторил комментарии ManicMailman о Prolog , который действительно сильно отличается от подхода Pascal / C / Java. Я бы также предложил две другие идеи.

Во-первых, один из моих любимых языков на все времена - это PostScript , широко известный как язык описания страниц, но сам по себе полноценный язык. Он почти полностью работает со стеками, поэтому вызывающие операторы берут аргументы из стека и возвращают в него результаты. Конечно, он также имеет тенденцию иметь связанное с ним высококачественное устройство вывода, что может быть полезно. : -)

Также, если вы ' Если вы готовы к чему-то , очень отличному от того, к чему вы привыкли, вам следует рассмотреть вопрос о функциональном языке программирования. Лично я не очень разбираюсь в этом, но понимаю, что Lisp и Haskell имеют своих поклонников.

Наконец, вы предположили, что переход на новый язык программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.

Удачи! : -)

Мне стоит рассмотреть функциональный язык программирования. Лично я не очень разбираюсь в этом, но понимаю, что у Lisp и Haskell есть свои поклонники.

Наконец, вы предположили, что переход на новый язык программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.

Удачи! : -)

Мне стоит рассмотреть функциональный язык программирования. Лично я не очень разбираюсь в этом, но понимаю, что у Lisp и Haskell есть свои поклонники.

Наконец, вы предположили, что переход на новый язык программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.

Удачи! : -)

но я понимаю, что у Lisp и Haskell есть свои поклонники.

Наконец, вы предположили, что переход к новому языку программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.

Удачи! : -)

но я понимаю, что у Lisp и Haskell есть свои поклонники.

Наконец, вы предположили, что переход к новому языку программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.

Удачи! : -)

вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить способ понимания и решения компьютерных проблем. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.

Удачи! : -)

вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить способ понимания и решения компьютерных проблем. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.

Удачи! : -)

1
ответ дан 30 November 2019 в 01:46
поделиться

Всё в целом: «Ухаууууууууууууууууууууууууууууууууууууааааааааааааааааааааааааааачайно в этом! откровение пришло ко мне, когда я впервые изучил функциональное программирование . В моем случае это произошло благодаря моим исследованиям в Tcl / Tk , который является мультипарадигмальным, но я полагаю, что вы можете получить тот же эффект от любого из сильно функциональных языков (таких как Lisp или Scheme).

5
ответ дан 30 November 2019 в 01:46
поделиться

Я бы попробовал и Scheme (или Lisp), и Python в таком порядке. Scheme изменит ваш разум в позитивном ключе (это произошло для меня), а затем перейдет к Python, где вы (квази) сможете объединить свой C ++ и новые функциональные знания. Обещаю, вы получите от них удовольствие.

2
ответ дан 30 November 2019 в 01:46
поделиться

Для чего-то действительно другого, попробуйте Lisp или Scheme.

12
ответ дан 30 November 2019 в 01:46
поделиться

Python дал мне такую ​​классную реакцию

15
ответ дан 30 November 2019 в 01:46
поделиться

Я дополню Lisp / Scheme, а также предложу Haskell как язык, который изменит ваше представление о программировании. Книга О'Рейли «Real World Haskell» представляет собой прагматическое введение, хорошо иллюстрированное конкретными примерами использования.

6
ответ дан 30 November 2019 в 01:46
поделиться

Я второй Python, и Ruby тоже.

Перечитал шаблоны проектирования ... затем изучил Python и понял, что довольно много шаблонов проектирования на самом деле являются временными препятствиями, пытающимися исправить дефектный язык например, C ++.

Когда классы являются объектами первого класса, например, шаблон Factory устаревает. Просто передайте класс, это ведь фабрика экземпляров. Методы классов Python также являются чрезвычайно мощным инструментом, и наследование работает.

Многие шаблоны проектирования - это обходные пути для языков, в которых отсутствуют замыкания, встроенные делегаты и т. Д.

Например, в Javascript:

button.onclick = function () {немного кода}

Просто, элегантно и мощно ... в C ++ у вас было бы намного больше работы!

2
ответ дан 30 November 2019 в 01:46
поделиться

Я бы порекомендовал J (jsoftware.com), как всегда. Он отличается от большинства других языков тем, что является символическим (хотя все символы отображаются в виде простого ASCII) и функциональным. Что еще более важно, он динамичный, интерактивный и в него встроено множество высокоуровневых концепций.

Например, взяв реплику из одного из других постов здесь, факториал в J будет:

   !10
3628800

для, например, факториал 10. Расширение этого, чтобы оценить количество 10 вещей, взятых по 5 за раз: Применяя это к трем аргументам и возвращая «1» для истины и «0» для ложи:

   palincheck&>'Able was I ere I saw Elba';'Step on no pets';'Not palindrome'
1 1 0

Изначально трудно так лаконично привыкнуть к программированию на таком продвинутом уровне, но вы можете обнаружить, что это растет на вас, особенно если вы любит быстро опробовать идеи.

0
ответ дан 30 November 2019 в 01:46
поделиться

Конечно, Haskell, но на самом деле все следующее действительно изменило мои взгляды:

Я начал работать с GWBasic много лет назад, когда был ребенком, поэтому я естественно тяготел к процедурным языкам.

Мой карьера началась с C ++, и это фундамент, на котором я строю.

  • JavaScript - познакомил меня с функциями первого класса, замыканиями, динамической типизацией.
  • Python - познакомил меня с более простым синтаксисом и динамическими языками в целом.
  • SQL - познакомил меня с языками, которые "есть" по сравнению с языками, которые «делают», код «есть».
  • Lua - минимализм и использование простых структур данных (таблиц) в качестве основы для всех структур данных.
  • C # - мой новый хлеб и масло .. . Преимущества сборки мусора, встроенных библиотек и т. Д.
  • C - У меня есть сила!
10
ответ дан 30 November 2019 в 01:46
поделиться

Я написал выше:

For instance, in Javascript :
button.onclick = function(){ some code }

И получил этот комментарий:

этот пример button.onclick определенно был крутым. и это тоже выглядит очень интуитивно. Спасибо! - ShaChris23

Мне это очень интересно.

Когда вы работаете с языком низкого уровня, таким как C ++, вы не думаете о вещах, которые можно сделать на языке высокого уровня.

ShaChris23 думает, как программист на C, открывающий для себя JavaScript: это «круто». Что является правдой ! Но программист на JavaScript, открывающий для себя C ++, будет думать наоборот, например: «Какой грубый язык, я даже не могу добавить метод в класс во время выполнения!» и он тоже будет прав.

Например, вы использовали бы шаблон Factory, когда программист Python просто поместит класс в переменную и передаст ее. Тот, кто никогда ничему не учился, кроме C ++, и не мечтает об этом!

Например, на Python я написал планировщик, основанный на времени, который назывался так:

task_handle = scheduler.execute_at (time, function)

Использование закрытия для «функции» делает это чрезвычайно мощным. Те, кто не знаком с понятием «закрытие», не могут об этом думать.

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

1
ответ дан 30 November 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: