Форматирование — это только часть Code style. Туда ещё входит адекватное именование переменных, отсутствие переусложненных конструкций, отсутствие функций по 300 строк и т.п.
Имхо вот как раз форматирование кода не имеет с креативностью вообще ничего общего. И правила форматирования должны быть зафиксированы, но так, чтобы о них не думать от слова совсем (ну то есть использовать автоформаттеры).
Давно хочу попробовать такой подход в обучении с++. Но все думаю о такой проблеме. Вот вы учите новому с++, а тут студент начинает гуглить, а в интернете (да и в книжках) большинство примеров чего-либо написаны как раз на старом Си с классами.
Что ему делать в таком случае? Или на практике все не так плохо?
А есть ли другие применения именно по замеру времени? Вопрос вот в чем. Если мы хотим замерить время между двумя событиями, то нам нужно два раза «посмотреть» на часы. На что тоже нужно потратить определенное время. И при уменьшении дельты времени между событиями, время на выполнение этого фиксирования влияет на результат все больше и больше. При этом кажется, что очень точные часы для такой задачи и не нужны.
Как с этим бороться? Рассчитывать время замера в теории и аккуратно вычитать? Или строить эксперимент таким образом, чтобы событие стало частью часов и меняло его состояние напрямую?
Абстрактно такие алгоритмы довольно интересны. Я думаю что-то подобное крутится внутри компиляторов (там ведь тоже выстраивается граф операций с выявлением независимых частей). Но если говорить именно о параллельных вычислениях, то в ваших выкладках почему-то совсем нет анализа синхронизации разных потоков вычислителей. Я говорю как о примитивах синхронизации, так и, например, синхронизации кешей ядер.
Причем даже если все ядра обращаются к одной памяти (почему бы и нет?), то внутри них ещё есть конвейер, который работает гораздо лучше, если в нем идет поток операций и не нужно никого дожидаться. Даже в вашем первом примере хоть количество условных тиков для выполнения операции уменьшилось с 3 до 2, я уверен, что на реальных процессорах вариант с полностью последовательным выполнением будет быстрее.
ps. Возможно я не совсем прав, все-таки более менее я знаком только с x86 архитектурой, и возможно есть примеры, где такое распараллеливание будет удачным, но я о них не знаю.
А ещё лучше вместо символов, которые могут значит что угодно, и о значении которых постоянно забываешь, писать просто текст. Я понимаю, что с этим появляются другие проблемы (в основном с локализацией и местом в UI). Но такой вариант был бы лучшим.
Вопрос по этапу оптимизации. «безопасно заинлайнить простые функции» — это про php код? А почему не отдать такие оптимизации всецело в руки с++ оптимизатора? Или есть какие-то граничные случаи, когда он не видит, что можно заинлайнить?
И ещё вопрос по организации работы между командами. Вот я написал какой-то php код, компилирую kphp и у меня ошибка где-то на уровне g++. Что вообще происходит в этом случае? Сразу запрос в вашу команду (aka ошибок с++ не должно быть) или разработчик сам разбирается?
А я выскажу несколько другое мнение (и мне даже странно, что оно редко проскальзывает), прав тот, кто более счастлив. Если человек из кожи вон лезет, страдая пытается закончить универ, то нафиг он ему и не нужен. Если обучение дает удовольствие, то обязательно нужно попытаться, это сильно расширяет ваш мир.
Сужу по себе. Отучился 6 лет на матфаке, потом пошел работать программистом. Я программировал ещё со школы, опыт был, но не коммерческий, поэтому взяли только джуном, с соответствующей зарплатой. Но при этом я ни разу не пожалел что проучился эти 6 лет. Не скажу, что каждый из дней учебы был в кайф, но это ощущение от того, что ты потихоньку начинаешь понимать математику, логику, а через них и окружающий мир не променяешь на что-то другое. А аргумент про деньги, если честно не совсем понимаю. Вот какая разница будешь ты получать определенную сумму в 25 или в 30 лет. Как будто в гонке участвуем.
ps. Кстати внезапно в работе были полезны и выч. геометрия и теория оптимизации. Я уже молчу про дискретку.
Это если доп. функции не станут мешать, а такое тоже не просто сделать. Например я перешел на вивальди с яндекс браузера именно по этой причине: там слишком много ненужных функций. Каждое обновление превращалось в игру «как отключить эту ерунду».
В расте эти ограничения ввели не для того, чтобы анализ был побыстрее, а для того, чтобы он в принципе был возможен и работал одинаково для всех. Даже в примере из статьи формально ворнинг не совсем верный, так как (и это в комментах уже писали) значение вполне может измениться в другом потоке. Даже можно обложить мьютексами с cond var, чтобы не было UB. Да, это странный код, но возможный, а значит его кто-нибудь да напишет, а кто-то другой начнет на этот код завязываться. (но тем не менее для адекватных людей проверка более чем полезная, да).
Я так понимаю на хаскеле проблема вообще теряет свой смысл. Важное свойство списков — при добавлении / удаления из него элемента, указатели (в широком смысле) на другие элементы продолжают указывать на те же данные. Я мало знаком с хаскелем, но кажется, что такая абстракция в него не вписывается. У вас же написан скорее разворот массива.
Подобная задача это же абсолютно типичная задачка на кодинг почти в любом языке и любой человек, оценивающий это больше чем в 5 минут должен вызывать подозрения
Ну не знаю. Например я односвязные списки в последний раз писал лет 10 назад, на Си. Разворот списка не писал ни разу в жизни, о такой задаче читал только в статьях о собеседованиях.
Ну то есть у меня нет никаких сомнений, что я этот разворот напишу (когда мне расскажут что это именно значит). Но так сходу сказать, что напишу за 5 мин… За 5 мин. пишутся только вещи, которые «на кончике пера», которые используются постоянно. А на кой черт мне, простите, разворот односвязного списка? Ощущение, что эта задача показывает только то, что ты в клубе. Клубе любителей ходить по собеседованиям.
upd. Проясню. Против самой задачи я ничего против не имею. В целом такие простые задачи неплохой способ отсеять совсем слабых программистов. Но требовать, чтобы их знали, держали в пальцах, да ещё допытывать время выполнения. Возможно я в чем-то не прав (я все-таки не лид и сам собеседования не проводил ещё), но мне это кажется сильно странным.
Вопрос совершенно не риторический.
Лично мне нравится начинание (я всегда за любые обучающие школы, не важно парни / девушки, сам преподаю), но заголовок у статьи довольно провокационный и смещает акцент с самой школы. При этом в статье не указано ни ответа на вопрос, ни в чем выражается «особый подход».
А без конкретики ничего не понятно. Я могу предположить, что у меня Си головного мозга, но, например, я не очень представляю что вы хотите получить в итоге.
Спасибо, но если честно, то уж больно поверхностно. Не видно как нейроморфные компьютеры реализуют хоть что-то из списка «преимуществ». А ведь это крайне нетривиальные утверждения, что, например, такие системы будут лучше масштабироваться.
ps. Вы, видимо, вместо архитектуры фон-Неймана имеете в виду машину Тьюринга. Вот в ней действительно есть жесткое разделение на память и вычислитель. Уже не говоря о том, что утверждение, что современные компьютеры основаны на арх. фон-Неймана довольно спорное.
Имхо вот как раз форматирование кода не имеет с креативностью вообще ничего общего. И правила форматирования должны быть зафиксированы, но так, чтобы о них не думать от слова совсем (ну то есть использовать автоформаттеры).
Что ему делать в таком случае? Или на практике все не так плохо?
Как с этим бороться? Рассчитывать время замера в теории и аккуратно вычитать? Или строить эксперимент таким образом, чтобы событие стало частью часов и меняло его состояние напрямую?
Причем даже если все ядра обращаются к одной памяти (почему бы и нет?), то внутри них ещё есть конвейер, который работает гораздо лучше, если в нем идет поток операций и не нужно никого дожидаться. Даже в вашем первом примере хоть количество условных тиков для выполнения операции уменьшилось с 3 до 2, я уверен, что на реальных процессорах вариант с полностью последовательным выполнением будет быстрее.
ps. Возможно я не совсем прав, все-таки более менее я знаком только с x86 архитектурой, и возможно есть примеры, где такое распараллеливание будет удачным, но я о них не знаю.
Не озвучили, но надеюсь все это будет синхронизироваться в учетной записи? Календарь, RSS?
Да, не планируется ли RSS вывалить в продакшен пораньше? Кажется, что функциональность немного попроще и менее опасная в плане скрытых багов.
Вопрос по этапу оптимизации. «безопасно заинлайнить простые функции» — это про php код? А почему не отдать такие оптимизации всецело в руки с++ оптимизатора? Или есть какие-то граничные случаи, когда он не видит, что можно заинлайнить?
И ещё вопрос по организации работы между командами. Вот я написал какой-то php код, компилирую kphp и у меня ошибка где-то на уровне g++. Что вообще происходит в этом случае? Сразу запрос в вашу команду (aka ошибок с++ не должно быть) или разработчик сам разбирается?
Сужу по себе. Отучился 6 лет на матфаке, потом пошел работать программистом. Я программировал ещё со школы, опыт был, но не коммерческий, поэтому взяли только джуном, с соответствующей зарплатой. Но при этом я ни разу не пожалел что проучился эти 6 лет. Не скажу, что каждый из дней учебы был в кайф, но это ощущение от того, что ты потихоньку начинаешь понимать математику, логику, а через них и окружающий мир не променяешь на что-то другое. А аргумент про деньги, если честно не совсем понимаю. Вот какая разница будешь ты получать определенную сумму в 25 или в 30 лет. Как будто в гонке участвуем.
ps. Кстати внезапно в работе были полезны и выч. геометрия и теория оптимизации. Я уже молчу про дискретку.
Ну то есть у меня нет никаких сомнений, что я этот разворот напишу (когда мне расскажут что это именно значит). Но так сходу сказать, что напишу за 5 мин… За 5 мин. пишутся только вещи, которые «на кончике пера», которые используются постоянно. А на кой черт мне, простите, разворот односвязного списка? Ощущение, что эта задача показывает только то, что ты в клубе. Клубе любителей ходить по собеседованиям.
upd. Проясню. Против самой задачи я ничего против не имею. В целом такие простые задачи неплохой способ отсеять совсем слабых программистов. Но требовать, чтобы их знали, держали в пальцах, да ещё допытывать время выполнения. Возможно я в чем-то не прав (я все-таки не лид и сам собеседования не проводил ещё), но мне это кажется сильно странным.
Предпочитаю не давать ответы на вопросы, в которых у меня нет компетенции.
Лично мне нравится начинание (я всегда за любые обучающие школы, не важно парни / девушки, сам преподаю), но заголовок у статьи довольно провокационный и смещает акцент с самой школы. При этом в статье не указано ни ответа на вопрос, ни в чем выражается «особый подход».
ps. Вы, видимо, вместо архитектуры фон-Неймана имеете в виду машину Тьюринга. Вот в ней действительно есть жесткое разделение на память и вычислитель. Уже не говоря о том, что утверждение, что современные компьютеры основаны на арх. фон-Неймана довольно спорное.