Про изучение языков программирования

Да, имен­но так оно и рабо­та­ет.

Имен­но поэто­му когда зна­ко­мые меня спра­ши­ва­ют, с како­го язы­ка начать зна­ком­ство с про­грам­ми­ро­ва­ни­ем, я нико­гда не сове­тую Джа­вас­крипт, Перл, Питон и про­чие язы­ки с дина­ми­че­ской типи­за­ци­ей. Совсем не пото­му, что они «хуже», а пото­му что понять, что про­ис­хо­дит, при отсут­ствии пони­ма­ния типов пере­мен­ных, невоз­мож­но.

Девоч­ка пыта­ет­ся совер­шить ариф­ме­ти­че­ские дей­ствия с пере­мен­ной типа char — дей­ствие, не вполне стан­дарт­ное, так что ком­пи­ля­тор дей­ству­ет «по наи­тию» — так что char в зави­си­мо­сти от кон­тек­ста ста­но­вит­ся чис­лом или стро­ко­вой пере­мен­ной.

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

Про­бле­мы с интер­пре­та­ци­ей нику­да не исче­за­ют, но если мы попро­бу­ем повто­рить девоч­ки­ны дей­ствия на том же C# или на Джа­ве, в рыло при­ле­тит при­вет от ком­пи­ля­то­ра — «ты чо с чем скла­ды­ва­ешь, совсем охре­нел, что ли?» И пред­ло­жит cast в дру­гой тип дан­ных. Поэто­му подоб­ных необъ­яс­ни­мых эффек­тов там про­сто не будет, а у про­грам­ми­ста выра­ба­ты­ва­ет­ся при­выч­ка рука­ми касто­вать пере­мен­ные при любых неяв­ных дей­стви­ях с раз­ны­ми типа­ми.

Сам я, кста­ти, пошёл сна­ча­ла по непра­виль­но­му пути, начав изу­чать про­грам­ми­ро­ва­ние с одно­го из самых запу­тан­ных язы­ков — с Пер­ла. Ну, того само­го, по кото­ро­му даже про­во­ди­лось сорев­но­ва­ние «Кто непо­нят­нее напи­шет» (https://en.wikipedia.org/wiki/Obfuscated_Perl_Contest). Не то, что­бы Пер­ло­вый код обя­за­тель­но полу­ча­ет­ся кри­вой и непо­нят­ный, но там очень про­сто сде­лать имен­но так. Для начи­на­ю­ще­го — не то.