JavaRush /Java блог /Random UA /10 статей, які має прочитати кожен програміст
Shoggy
32 рівень
Санкт-Петербург

10 статей, які має прочитати кожен програміст

Стаття з групи Random UA
Будучи Java-програмістом та розробником програмного забезпечення, я багато чому навчився з безлічі статей під назвою Що кожен програміст повинен знати про ..... , вони, як правило, дають багато корисної та вичерпної інформації про конкретну тему, яку інакше важко виявити. У моїх прагненнях до знань я стикався з деякими дуже корисними статтями, які додавав до закладок як довідкову інформацію для перечитування. Думка, що багато програмістів зможуть отримати користь з читання цієї добірки, спонукала мене написати цей пост і поділитися з вами всіма цими статтями "Що кожен програміст повинен знати". 10 статей, які має прочитати кожен програміст - 1У цій статті ви познайомитеся з класичним набором знань, необхідних кожному програмісту, таких як пам'ять (memory),Unicode , обчислення з плаваючою точкою (floating point arithmetic), робота з мережами (networking), об'єктно-орієнтоване проектування (object oriented design), час (time), URL Encoding , Stringта багатьом іншим. Цей список дуже важливий для початківців і новоприбулих, оскільки часто не вистачає практичних знань. Оскільки більшість статей написані на основі реальних прикладів, програмісти початкового та середнього рівня можуть отримати багато корисного. Також вивчення основ на початку кар'єри допоможе уникнути помилок, які вже зробабо інші програмісти та розробники програмного забезпечення на їхньому шляху навчання. На жаль, не вся інформація з описаних статей легко засвоюється з першого прочитання. Швидше за все, ви можете не відразу зрозуміти деякі подробиці про числа з плаваючою точкою або заплутатися з особливостями пам'яті, але важливо тримати цю підбірку під рукою і звертатися до неї час від часу за уточненнями. Так що бажаю вам удачі та насолоджуйтесь читанням цих чудових статей. До речі,

Що кожен програміст повинен знати про пам'ять

переклад на російську Це одна з класичної статей, яка проведе вас за особливостями пам'яті, деякі з яких старі, деякі нові, деякі відомі та деякі не дуже. Незважаючи на керуючу роль та всюдисущість, не кожен програміст має достатній рівень знань про Пам'ять. Важливість знайомства з пам'яттю у сучасних системах збільшується, якщо ви зайняті у сфері написання високопродуктивних програм. Розробники апаратних засобів вигадують складніші моделі управління пам'яттю та методи прискорення, такі як кеш CPU, але вони не можуть оптимально працювати без деякої допомоги з боку програмістів. Я досі читаю цю статтю, і не можу сказати наскільки багато я дізнався з неї про RAM, кеші CPU, наприклад, L1 і L2 кеш, різні види пам'яті, прямому доступі до пам'яті, конструкції контролера пам'яті, і пам'яті в цілому. Коротше кажучи,

Що повинен знати кожен вчений про арифметику чисел з плаваючою точкою

Тема арифметики операцій з плаваючою точкою підступна і непроста в освоєнні. Багато програмістів Java навіть не знають, що може піти не так при порівнянні значень типу float/ doubleоператором ==. Багато хто з нас часто роблять помилки, реалізуючи грошові розрахунки в типах floatта double. Ця стаття ще одна перлина цієї серії і є must read для всіх розробників програмного забезпечення та програмістів. У міру зростання досвіду ви повинні вдаватися в тонкощі загальних тем, арифметика чисел з плаваючою точкою є однією з них. Як старший Java розробник ви повинні знати як виконувати грошові розрахунки, коли використовувати типи float, doubleабоBigDecimal, як округлювати числа з плаваючою точкою та багато іншого. Навіть якщо ви маєте тверді знання в цій темі, після прочитання статті ви зможете відкрити для себе щось нове про операції з плаваючою точкою.

Що кожен розробник повинен знати про Unicode

Кодування символів є ще однією областю, де багато програмістів зазнають труднощів, і "Абсолютний мінімум, який, безумовно, повинен знати кожен розробник програмного забезпечення про Unicode і набори символів (ніяких виправдань!)" покликаний заповнити цю прогалину. Для довідки, так, це повна назва цієї статті. Її автором є Joel Spolsky, один із засновник https://stackoverflow.com. Джоел написав цю статтю у своєму блозі майже 10 років тому, але вона не втратила своєї актуальності й у сучасному світі. Стаття пояснює, що таке Unicode, що таке кодування, як символи представлені з використанням байт і багато іншого. Однією з найкращих речей у цій статті є мова та метод викладу, навіть якщо ви нічого не знаєте про Unicode, у вас не виникне проблем із розумінням. Коротше кажучи, ще один must read для всіх програмістів, кодерів та інженерів програмного забезпечення.

Що кожен програміст повинен знати про час

Крім кодування символів, час і дати ( TimeandDate) є ще однією областю, де багато програмістів, включаючи мене, зазнають труднощів. Навіть старші розробники губляться у GMT, UTC, літнім часом та високосними секундами. Чесно кажучи, не легко впоратися з часовими поясами, не припускаючись будь-яких помилок, а використання літнього часу додатково ускладнює завдання. Проблеми посилюються, якщо ви використовуєте метод спроб і помилок, тому що ви ніколи не будете в змозі вирішити вашу проблему, роблячи це. Існує безліч речей, які можуть піти не так, і існує така ж кількість помилок. Такі речі, як, чи містить дата часовий пояс чи ні можуть збити вас з пантелику, перетворення часу UNIX до інших тимчасових зон, може розлютити вас, і ви з легкістю можете забути про синхронізацію годин і затримок. Я сподіваюся, що після прочитання цієї статті,

Що кожен веб-розробник повинен знати про кодування URL

Ця стаття описує поширені помилкові уявлення про кодування Uniform Resource Locator (URL), а потім намагається роз'яснити кодування URL для HTTP, і далі демонструє проблеми, що часто виникають, і шляхи їх вирішення. Хоча ця стаття не заточена під будь-яку мову програмування, вона ілюструє проблеми в Java) і закінчується поясненнями з виправлення проблеми з кодуванням URL в Java, і в веб-додатках на декількох рівнях. Ви дізнаєтесь основи URL граматики, загальний синтаксис URL у HTTP та інших протоколах. У цій статті також розглядаються часті підводні камені URL-адреса, наприклад, кодування символів, спеціальні символи в різних частинах URL, та питання кодування/декодування URL. Якщо ви програміст Java, то ви також дізнаєтеся про те, як правильно керуватися з URL-адресаами в програмі Java. Як побудувати URL та використання клієнтської бібліотеки Apache Commons HTTP. Нарешті, також пропонуються найкращі приклади та варіанти роботи з URL-адресаами, наприклад, ви повинні кодувати URL при його побудові, переконатися, що ваші фільтри URL-перезапису справляються з вашими URL коректно та багато іншого. Коротше кажучи, must read для будь-якого веб-розробника та програміста.

Що кожен програміст знати про веб-розробку?

Ця цікава стаття з програмістівStackExchange про те, що слід обдумати кожному програмісту, що реалізує технічні деталі веб-додатку, перш ніж відкрити сайт для публіки. Вона включає речі з областей розробки інтерфейсів і зручності використання (Interface design and User Experience), Безпеки (Security), веб-стандартів (Web standards), продуктивності (Performance), оптимізації для пошуку (Search Engine Optimization (SEO)), використовуваних технологій та деяких важливих ресурсах. Сьогоднішній світ значною мірою залежить від інтернету та досить поширена наявність у програміста особистого сайту чи блогу. Досвід отриманий з цієї статті буде корисним не тільки у вашій професійній діяльності, але й у власних проектах. Ви дізнаєтеся про всі ключові технології, такі як, HTTP, HTML, XML, CSS, JavaScript,

Що кожен програміст повинен знати про SEO

Це ще одна стаття, яка буде достатньо корисною для веб-розробників, програмістів та блогерів. SEO є занадто великим, щоб ігнорувати його, як і багатьом програмістам, так і блогерам важливо знати основи пошукової оптимізації, щоб допомогти Google знайти їх вміст та показати колегам програмістам. Оскільки жодна компанія не може вижити без веб-присутності у сучасному взаємопов'язаному світі, SEO стає ще важливішим. Якщо у вас є стартап з продажу будь-якого товару, то SEO є тим, що слід піклуватися. Усі програмісти, особливо веб-розробники, можуть отримати значну користь від цієї статті. Пам'ятайте, пошукова оптимізація є широким і дуже динамічним моментом, а також варіюється в різних пошукових системах, наприклад, Google, Yahoo, та інших. Отже,

Що кожен C програміст повинен знати про невизначену поведінку (Undefined Behaviour) # 1/3

Мова програмування C має концепцію "невизначеної поведінки". Невизначена поведінка широка тема з великою кількістю нюансів, і це одна з причин, чому я люблю Java: менша кількість невизначеної поведінки, менша плутанина, більша стабільність і більше світу. Багато хто, здавалося б, розумні речі в C насправді мають невизначену поведінку, і це загальне джерело помилок у програмах. Крім того, будь-яка невизначена поведінка в C дає дозвіл реалізаціям (компілятора та середовища виконання) для генерації коду форматуючого жорсткого диска, здійснення абсолютно несподіваних речей, або навіть гірше. Читайте цю прекрасну статтю для глибокого занурення у море непередбачуваної поведінки.

Що кожен програміст потрібно знати про мережі

З самої статті "Ви програміст. Ви коли-небудь задавалися питанням, як працюють розраховані на багато користувачів ігри? З боку це здається чарівним: два або більше гравці поділяють спільний досвід по мережі, немов вони насправді існують разом у тому ж віртуальному світі. Але як програмісти ми знаємо правду, що те, що відбувається насправді досить сильно відрізняється від того, що ви бачите. Виявляється, що все це ілюзія. Це дуже цікава стаття про мережі, написану для програмістів ігор, але я думаю, що кожен програміст і розробник може отримати вигоду з неї.

Що кожен Java розробник повинен знати про Рядки (String)

Це моя стаття про java.lang.Stringі особисто я вважаю, що кожен програміст Java повинен знати про це. Рядки дуже важливі у повсякденному програмуванні на Java, і саме тому хороші знання є обов'язковими для будь-якого розробника Java. Ця стаття стосується багатьох важливих аспектів Рядок, включаючи рядковий пул, рядкові літерали, порівняння рядків за допомогою ==проти equals(), перетворення байт у рядок, то чому рядок є незмінним (immutable), правильне об'єднання рядків та багато іншого. Просунутий програміст, можливо, вже знаєте всі ці особливості, але навіть у цьому випадку буде непогано повторити.

Що кожен програміст повинен знати про безпеку?

Це питання було задано студентом програмістом на StackOverflow. Так само, як багато ми знаємо про загальні поняття програмування, такі як операційна система, алгоритми, структури даних, комп'ютерна архітектура та інші речі, так само важливо знати і про безпеку. Хоча тема безпеки досить широка, містить області шифрування/дешифрування, SSL, веб-безпеки, заплутування, автентифікації, авторизації тощо, існує базовий мінімум знань обов'язковий для кожного програміста. Особисто я на початку своєї кар'єри не знав багато чого про безпеку, коли я почав писати Servlet/JSP на основі Java web application, я дізнавався про веб-безпеку та ряд загроз безпеки таких як SQL Injection, відмова в обслуговуванні (Denial of Service), XML Injection, міжсайтовий скриптинг (Cross site scripting) та інших. Як розробник Java, тепер я дотримуюсь безпечних методів Java програмування, що надаються fortify, PMP та іншими постачальниками статичних аналізаторів коду. У цій статті міститься дуже хороша добірка тем та посилань про безпеку, і незалежно від того, програмуєте ви чи ні, ви, безсумнівно, отримаєте користь від цього ресурсу.

Показники затримки (Latency Numbers), які повинен знати кожен програміст

Ця стаття є бонусною, але, проте, must read для будь-якого програміста. Для написання високопродуктивної програми будь-якою мовою програмування будь то Java або C++, ви повинні знати основні значення затримок, наприклад, скільки часу займе читання змінної з пам'яті, з L1-кешу, з L2-кешу, при випадковому читанні (random read) з SSD та з диска. Скільки часу необхідно, щоб заблокувати/розблокувати м'ютекс, щоб відправити пакет даних з одного міста до іншого або робити прохід із поверненням (roundtrip) в межах одного центру обробки даних. Ці значення затримок не залежать від мови програмування і є частиною базових знань, які розробник повинен мати для написання сильнонавантажених додатків з низькою затримкою (high frequency low latency). Позитивний момент про це посилання полягає в тому, що він надає порівняльний аналіз того, як ці значення розвивалися багато років. Ви можете бачити, якими були значення у 2006 році і те, що вони є зараз. Ось і все, про цей список статей, які має прочитати кожен програміст. Читаючи статті такі якЩо кожен програміст чи розробник повинен знати, ви поглиблюєте свої знання у конкретній темі. Чесно кажучи, існує дуже багато речей до вивчення програмістами, і вивчення мови програмування, такої як Java, лише верхівка айсберга, але хіба більшість з нас мають пристрасть до навчання. Програмування - робота, що вимагає постійного розвитку, і єдиними речами, які будуть корисні будь-якому програмісту протягом усієї кар'єри, є фундаментальні знання про такі речі як пам'ять (memory), Unicode, обчислення з плаваючою точкою (floating point numbers) , час (time) , безпека (security). Деякі речі специфічні для конкретних мов, наприклад мій пост про рядки (String) в Java і, Що кожен C програміст повинен знати про невизначену поведінку (Undefined Behaviour), але і вони хороші до вивчення для багатьох початківців та розробників.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ