Я нашел много разработчиков, которые не интересуются поблочным тестированием. На большую работу с небольшой выплатой всегда походит, когда Вы запускаете. Никто не хочет зарегистрироваться в дополнительной работе и таким образом, они сопротивляются. После того как люди запускают, они обычно с энтузиазмом придерживаются его, но получение их запустилось, может быть твердым.
Я, вероятно, в глубине души, в основном программист на C ++, потому что я так много использовал его, поэтому мой опыт может показаться вам интересным.
Вот языки, которые я выучил, и мои прозрения в хронологическом порядке. Я выделил для себя самые важные. Конечно, есть много разных языков, которые могут дать одно и то же понимание, я просто делюсь своим личным опытом.
Так что, конечно, этот список намного длиннее, чем вам (или кому-либо еще), вероятно, хотелось бы. Для максимального эффекта мой короткий список будет следующим: Scheme (или Lisp), Joy (или PostScript), Erlang, Eiffel, AspectJ, Erlang, ML и Haskell. Если вы хотите сосредоточиться только на паре языков и хотите углубиться в них, тогда вы можете многого добиться от освоения Scala или C #. Конечно, есть еще кое-что, чему вы могли бы научиться у C ++ 0x, особенно если вы немного подтолкнете его.
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.
Пролог является обязательным. Любой другой язык другой парадигмы был бы хорошим началом. Пролог представляет собой логическую парадигму. Еще один отличный, но совершенно другой язык - 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))
)
)
)
)
Недавнее "Это так круто!" для меня была Scala. Он прекрасно сочетает в себе функциональное программирование, объекты и потоки, и все это работает в JVM.
Для меня это была первая действительно крутая вещь, которую я ' Я видел, что это связано с Java. :)
Ну ладно, это было второе. Первым был обратимый отладчик, название которого я забыл, но он позволял запускать виртуальную машину «задом наперед», чтобы найти ошибку.
Python может быть ответом.
Он может улучшить ваше мышление и дизайн на C ++ и научит вас некоторым новым идеям и методологиям, таким как функциональное программирование.
Поначалу "утка" может показаться странным и проблематичным, но у него есть свои преимущества.
И вы можете в конечном итоге использовать его даже в производственных целях
Другой вариант - попытаться написать «hello world» в brain fu_k . Может быть, это не лучшее использование для вашего времени, но после этого вы никогда не будете пробовать эту штуку "расширения перспективы" :)
C ++ все время "ухауууууууууууууууууууууууууууууууууу" все время ... и каждые несколько лет или около того в невероятных приложениях.
Если бы мне пришлось выбрать что-то еще, что так же неправильно понимается и легко обманывается, но невероятно в выражении, конечно, просто: JavaScript.
Следующим ведущим и полезным индикатором снова, очевидно, является фаворит Google, Python, но они переходят к двум вышеперечисленным более быстрыми темпами, чем когда-либо прежде.
Я программировал на Pascal, Delphi, Assembly, C, C ++, Scheme, Lisp, Java, C # и CUDA.
C # - это ответ - вы можете писать чрезвычайно динамичные программы, используя отражение, и WPF действительно ставит C # на передний план.
Сборка (которую я изучил до C ++ и использовал для написания обработчиков прерываний TSR под DOS): мне нравилось иметь иллюзию знания, что на самом деле делает машина.
C # тоже изящен. : Синтаксис указателя на член в C ++ настолько запутан, что анонимные делегаты C # сравнительно забавны (мы получим нечто подобное в следующей версии C ++).
Во-первых, хорошо, что вы ищете что-то новое! Если вы готовы к этому, это отличная возможность попробовать что-то, что работает совершенно по-другому, хотя бы для того, чтобы расширить ваше понимание того, как все работает. Я бы повторил комментарии ManicMailman о Prolog , который действительно сильно отличается от подхода Pascal / C / Java. Я бы также предложил две другие идеи.
Во-первых, один из моих любимых языков на все времена - это PostScript , широко известный как язык описания страниц, но сам по себе полноценный язык. Он почти полностью работает со стеками, поэтому вызывающие операторы берут аргументы из стека и возвращают в него результаты. Конечно, он также имеет тенденцию иметь связанное с ним высококачественное устройство вывода, что может быть полезно. : -)
Также, если вы ' Если вы готовы к чему-то , очень отличному от того, к чему вы привыкли, вам следует рассмотреть вопрос о функциональном языке программирования. Лично я не очень разбираюсь в этом, но понимаю, что Lisp и Haskell имеют своих поклонников.
Наконец, вы предположили, что переход на новый язык программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.
Удачи! : -)
Мне стоит рассмотреть функциональный язык программирования. Лично я не очень разбираюсь в этом, но понимаю, что у Lisp и Haskell есть свои поклонники.Наконец, вы предположили, что переход на новый язык программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.
Удачи! : -)
Мне стоит рассмотреть функциональный язык программирования. Лично я не очень разбираюсь в этом, но понимаю, что у Lisp и Haskell есть свои поклонники.Наконец, вы предположили, что переход на новый язык программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.
Удачи! : -)
но я понимаю, что у Lisp и Haskell есть свои поклонники.Наконец, вы предположили, что переход к новому языку программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.
Удачи! : -)
но я понимаю, что у Lisp и Haskell есть свои поклонники.Наконец, вы предположили, что переход к новому языку программирования - это путь вперед. Если вы хотя бы в меру академически настроены, вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить понимание и решение компьютерных задач. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.
Удачи! : -)
вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить способ понимания и решения компьютерных проблем. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.Удачи! : -)
вы можете обнаружить, что чтение данных и алгоритмов может серьезно улучшить способ понимания и решения компьютерных проблем. Один из стандартных текстов - это Алгоритмы на C Седжвика, хотя, по моему мнению, Искусство компьютерного программирования Кнута является лучшим в этой области.Удачи! : -)
Всё в целом: «Ухаууууууууууууууууууууууууууууууууууууааааааааааааааааааааааааааачайно в этом! откровение пришло ко мне, когда я впервые изучил функциональное программирование . В моем случае это произошло благодаря моим исследованиям в Tcl / Tk , который является мультипарадигмальным, но я полагаю, что вы можете получить тот же эффект от любого из сильно функциональных языков (таких как Lisp или Scheme).
Я бы попробовал и Scheme (или Lisp), и Python в таком порядке. Scheme изменит ваш разум в позитивном ключе (это произошло для меня), а затем перейдет к Python, где вы (квази) сможете объединить свой C ++ и новые функциональные знания. Обещаю, вы получите от них удовольствие.
Для чего-то действительно другого, попробуйте Lisp или Scheme.
Я дополню Lisp / Scheme, а также предложу Haskell как язык, который изменит ваше представление о программировании. Книга О'Рейли «Real World Haskell» представляет собой прагматическое введение, хорошо иллюстрированное конкретными примерами использования.
Я второй Python, и Ruby тоже.
Перечитал шаблоны проектирования ... затем изучил Python и понял, что довольно много шаблонов проектирования на самом деле являются временными препятствиями, пытающимися исправить дефектный язык например, C ++.
Когда классы являются объектами первого класса, например, шаблон Factory устаревает. Просто передайте класс, это ведь фабрика экземпляров. Методы классов Python также являются чрезвычайно мощным инструментом, и наследование работает.
Многие шаблоны проектирования - это обходные пути для языков, в которых отсутствуют замыкания, встроенные делегаты и т. Д.
Например, в Javascript:
button.onclick = function () {немного кода}
Просто, элегантно и мощно ... в C ++ у вас было бы намного больше работы!
Я бы порекомендовал 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
Изначально трудно так лаконично привыкнуть к программированию на таком продвинутом уровне, но вы можете обнаружить, что это растет на вас, особенно если вы любит быстро опробовать идеи.
Конечно, Haskell, но на самом деле все следующее действительно изменило мои взгляды:
Я начал работать с GWBasic много лет назад, когда был ребенком, поэтому я естественно тяготел к процедурным языкам.
Мой карьера началась с C ++, и это фундамент, на котором я строю.
Я написал выше:
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)
Использование закрытия для «функции» делает это чрезвычайно мощным. Те, кто не знаком с понятием «закрытие», не могут об этом думать.
Изучение новых языков, даже только изучение базовых понятий, сделает вас лучшим программистом на всех языках,