замечание по программированию на Си для начинающих.
Си - это не язык, в котором методом случайного тыка, перебора вариантов или копипасты чужого кода можно что-то написать. знание Си - это не формальное знание его синтаксиса и умение написать код, который скомпилируется и даже, возможно, запустится. надо всегда очень чётко понимать, что ты делаешь и почему.
также важно знание прикладной области, для которой ты собрался что-то писать. Си - универсальный инструмент и на нём можно написать что угодно. он поддерживается на тысячах разных архитектур, от мелких контроллеров и FPGA до мультипроцессорных серверных и распределённых систем. но протоколы, API систем и библиотек, сетевой обмен и прочее - это уже специфика области применения. без неё вы далеко не уедете. поэтому "начинающий" программист на Си - это первые десять лет профессиональной работы. а учиться придётся всю жизнь, потому что архитектуры, системы и протоколы постоянно меняются и развиваются. у вас не будет уютненького тёплого местечка, где можно ничего не читать и ничего не изучать или кропать квадратно-гнездовой типичный код, не приходя в сознание, и получать за это деньги.

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

если вы не понимаете, что вы написали, то берёте книжку Кернигана&Ритчи, читаете, отвечаете на вопросы, выполняете предложенные тестовые задания. возвращаетесь к своей программе и ищете в ней ошибку. и так в цикле, до полного просветления. если не получилось с третьего прохода - вероятно, Си - не ваш выбор и лучше его оставить и выбрать что-то попроще.
если вы используете стандартные/сторонние функции или API системы - читаете внимательно документацию к ним. возвращаетесь к коду и ищете ошибку.
очень неплохо также поизучать ассемблер для той архитектуры, под которую вы пишете. это вправит мозги в плане управления памятью, а это критически важно. важно понимать, как хранятся и передаются данные. без этого тоже никаких успехов в Си не получится.

стопроцентное понимание того, что вы делаете, и чёткое представление об архитектуре и области применения - это единственный способ научиться писать на Си.

#мысли вслух #программирование #Си #С