Програмування собі: чому всім потрібно навчитися писати код. У чому полягає робота техніка-програміста Що повинен знати кожен програміст

Програмування собі: чому всім потрібно навчитися писати код. У чому полягає робота техніка-програміста Що повинен знати кожен програміст

Почати свій шлях до кар'єри програміста варто з відповіді на питання, чи вам потрібно програмування взагалі? Це питання не стосується тих, хто навчається або навчався за фахом, близьким до програмування. Якщо вам у школі математика давалася краще за гуманітарні науки, якщо вам подобається проводити багато часу за комп'ютером, якщо вам хочеться вивчати щось нове, тоді програмування вам підійде.

З чого почати

Є кілька варіантів розвитку подій, у яких людина стає програмістом. Перший – батьки-програмісти, які всьому навчили своїх дітей. Таким дітям навіть не треба йти до університету. Другий варіант – модна професія програміста. Після школи потрібно було вибрати, куди піти вчитися, і вибрали модний напрямок IT, начебто сподобалося. І останній варіант – хобі, яке переросло у роботу.

Якщо з вами нічого з перерахованого вище не сталося, значить, у вас є вибір з чотирьох варіантів:

  • Самоосвіта. Цей варіант можна використовувати як самостійно, і у парі коїться з іншими методами. В інтернеті повно, і додатків, які допомагають вивчати різні мови програмування та технології. Але це найважчий шлях для початківців.
  • Університет. Якщо ви закінчуєте школу і хочете бути програмістом, тоді йдіть до університету. Якщо не за знаннями, тоді за скоринкою. Вона може стати бонусом при влаштуванні на роботу. Хоча й якісь знання ви також отримаєте. Але не забувайте займатись і самонавчанням. До вибору вишу варто підійти дуже відповідально. Уважно вивчіть програми навчання та обирайте найкращі технічні вузи.
  • Ментор. Буде дуже непогано, якщо ви знайдете людину, яка погодиться допомогти вам і направить вас у правильний бік. Він підкаже відповідні книги та ресурси, перевірить ваш код, дасть корисні поради. До речі, ми вже писали про те, де ви зможете знайти ментора. Наставника можна шукати серед знайомих програмістів, на IT-тусовках та конференціях, на онлайн-форумах тощо.
  • Спеціалізовані практичні курси. Спробуйте пошукати у своєму місті курси, де вас навчать якійсь мові програмування чи технології. Я був приємно здивований кількістю таких курсів, у тому числі безкоштовних і з подальшим працевлаштуванням.

Яку мову, технологію та напрямок вибрати

Коли ви станете програмістом, через рік-другий будете вільні вибирати будь-яку мову, яка вам подобається. Але при виборі першої мови програмування новачок має враховувати такі критерії:

  • Наявність на ринку вакансій. Кінцева мета цього шляху – знайти роботу програмістом. А це буде важко зробити, якщо на ринку вакансій ніхто не шукатиме розробників вашою мовою програмування. Перевірте сайти з вакансіями, перегляньте кого більше шукають, випишіть десяток мов. І переходьте до наступного критерію.
  • Низький рівень входження. Якщо вам доведеться витратити тривалий час вивчення мови, це може відбити у вас полювання до програмування взагалі. Почитайте про ті мови, які ви обрали вище. Перегляньте літературу, яку потрібно прочитати, щоб вивчити ці мови. І виберіть ті, про які пишуть, що вони легкі, або які вам видалися легкими. Такими мовами можуть бути PHP, Ruby, Python.
  • Кайф від процесу. Якщо вам не подобається писати код обраною мовою, ви не отримуватимете задоволення від цього процесу, від роботи та від життя. А воно вам потрібне? Зробіть правильний вибір.

Також вам доведеться визначитися із напрямком програмування. Мобільне, десктопне, ігри, Інтернет, низькорівневе програмування тощо. Найпопулярніші та відносно легкі галузі - розробка під Інтернет, мобільні та десктопні клієнти. Під кожен напрямок може підходити одна мова і зовсім не підходити іншу. Тобто при виборі мови програмування варто відштовхуватися і від цього фактора.

У будь-якому випадку вивчіть веб-технології. Це мова розмітки HTML, стилі CSSі , який дозволить зробити вашу сторінку динамічною. На наступному етапі вивчіть серверну мову (Python, PHP, Ruby та інші) та відповідні для неї веб-фреймворки. Вивчіть бази даних: практично у кожній вакансії програміста це згадується.

Як отримати початковий досвід

Без досвіду ви не отримаєте роботи. Без роботи ви не отримаєте досвіду. Замкнене коло реального життя. Але нічого страшного, ми з нього виберемося.

По-перше, не варто чекати, доки ви прочитаєте всі книги з обраної мови програмування. Починайте писати свої перші рядки коду вже після другого розділу книги. Виконуйте всі завдання з книг, передруковуйте приклади, знайтеся на них. Ускладнюйте приклади та завдання з книг своїми ідеями. Створюйте свої завдання до пройденого матеріалу. Вирішуйте ці завдання.

По-друге, вам потрібно знайти свої перші проекти. Це, мабуть, найскладніший варіант, але робітник. Вам доведеться самому шукати замовлення, виконувати їх, морочитися з оплатою. Для новачка це архіскладно, але потім всі інші варіанти здадуться плювою справою. Виконані проекти можна буде записати у досвід та показати вашому майбутньому роботодавцю. Реальні проекти є величезним плюсом у вашому резюме.

Якщо ви знаєте англійська мова, реєструйтесь краще на англомовних біржах Ринок там більший. Якщо не знаєте англійської, вчіть її. А поки що вам доступні російськомовні біржі фрілансу. Шукайте невеликі проекти, які відповідають вашому рівню знань або трохи вище за нього. Подайте заявку на кілька десятків таких завдань. І приготуйтеся отримати море відмов. Але якщо одна-дві заявки вистрілять, ви матимете шанс отримати реальний досвід.

Ще одним непоганим варіантом отримання реального досвіду є open source. Таким проектам завжди потрібні нові люди, хай навіть новачки. Ви можете пошукати в проекті баги або подивитися у баг-трекері та запропонувати методи їх вирішення. Знайти такі проекти легко на GitHub або . Не соромтеся ставити там запитання.

Четвертий варіант отримання досвіду – допомога знайомим програмістам. Попросіть їх передати вам маленькі та нескладні завдання. Якщо щось не виходитиме, у вас завжди буде до кого звернутися. І при цьому ви братимете участь у реальному проекті.

Останній спосіб – власні проекти, різні хакатони чи робота в коворкінгу. Свої проекти складно розпочинати самому, краще пошукати знайомих чи друзів.

Чому варто вибрати Python

Поговоримо про вибір першої мови програмування. Перша мова має бути простою і популярною на ринку. Такою мовою є Python. Я дуже раджу вибрати саме його як першу мову програмування.

Код програми на Python читабельний. Вам навіть не потрібно бути програмістом, щоб загалом зрозуміти, що відбувається в програмі. Через нескладний синтаксис Python вам знадобиться менше часу для написання програми, ніж, наприклад, на Java. Величезна база бібліотек, яка заощадить вам купу сил, нервів та часу. Python є високорівневою мовою. Отже, вам не потрібно особливо думати про осередки пам'яті і про те, що там розмістити. Python – мова широкого призначення. І він такий простий, що навіть діти можуть його вивчити.

Заради справедливості варто згадати і про інші мови програмування. Javaможе стати непоганим вибором для новачка Ця мова популярніша, ніж Python, але й трохи складніша. Натомість інструменти для розробки набагато краще опрацьовані. Варто лише порівняти Eclipse та IDLE. Після Java вам буде простіше перейти до роботи з мовами низького рівня програмування.

PHP- Ще одна дуже популярна мова. І, мені здається, він навіть простіше, ніж Python. Дуже легко знайти собі ментора або вирішення якоїсь проблеми на форумі. Все тому, що у світі існує безліч PHP-програмістів різного рівня. У PHP немає нормального імпорту, є безліч варіантів вирішення однієї і тієї ж задачі. А це ускладнює навчання. І PHP заточений виключно під Інтернет.

Мови Cі C#дуже складні для новачка. Ruby - гарний вибіряк друга мова, але не першої. JavaScript- дуже проста мова, але нічого доброго він вас не навчить. А завдання першої мови програмування таки навчити вас чогось правильного, задати якусь логіку.

Чи важлива англійська мова

Важливий! Не знаєте? Вчіть. Знаєте? Вдосконалюйте. Вчіться читати, писати, слухати і говорити англійською. Наголошуйте на технічну літературу. Слухайте англомовні подкасти. Читайте англомовні підручники з програмування.

Що потрібно знати, окрім мови програмування

Звичайно ж, окрім мови програмування та англійської, потрібно знати щось ще. А ось що – залежить від напрямку, який ви оберете. Веб-програміст повинен знати HTML, CSS, JavaScript. Десктоп-програміст навчає API операційної системи та різні фреймворки. Розробник мобільних додатківвчить фреймворки Android, iOS чи Windows Phone.

Усім потрібно вивчити алгоритми. Спробуйте пройти курс на Coursera або знайти відповідну для себе книгу за алгоритмами. Крім цього, потрібно знати одну із баз даних, патерни програмування, структури даних. Варто також ознайомитися з репозиторіями коду. Хоча б із одним. Обов'язковим є знання систем версійного контролю. Вибирайте Git, він найпопулярніший. Вам потрібно знати інструменти, з якими ви працюєте, операційну систему та середовище розробки. І головна навичка програміста – вміти гуглити. Без цього ви не проживете.

Останні кроки

Вам потрібно підготувати резюме. Не просто резюме, а . Не варто писати там, але й замовчувати про свої вміння теж не потрібно. Після того, як вас запросять на інтерв'ю, ви повинні до нього підготуватися. Пройдіться за матеріалом, який вказаний у вашому резюме. Ви маєте бути впевнені у своїх знаннях. Перегляньте проекти, над якими ви працювали, згадайте технології, які ви застосовували. І наперед – до світлого майбутнього з новою професією програміста.

Мій список містить такі мови:

  1. C++. Саме цією мовою написано багато з нижче зазначених платформ (JVM, CLR, Node та інші). Крім того, за його допомогою вам простіше зрозуміти, як вручну виконувати оптимізацію пам'яті.
  2. C# чи Java.Ні, вам не потрібно знати відразу обидва. Вивчення однієї з цих об'єктно-орієнтованих мов дуже схоже вивчення іншого.
  3. HTML.Я не вважаю його однією з мов програмування, але інші дотримуються саме цієї думки, тому…
  4. CSS. Вкрай необхідний для будь-яких видів веб-розробки.
  5. JavaScript.Його сучасніший і приємніший варіант, а не та погань, якою ми користувалися 20 років тому. Зверніть увагу: сама мова не сильно змінилася з того часу і аж до теперішнього моменту. Ми, а саме, програмісти, які його використовують, ось хто справді змінився.
  6. SQL.Знадобиться для роботи з реляційними базами даних.
  7. Lisp.Так, Lisp. Або, якщо бути точнішим, “одне із втілень цієї мови”. Підійде Clojure, Lisp, Scheme, Nu або щось на зразок того. Ви повинні знати, що є гомоіконною мовою, а також розуміти, як при використанні правильних інструментів зникають межі між кодом і даними.
  8. Smalltalk.Ага. У будь-якій основі графічного інтерфейсу, побудованого на базі власних апаратних засобів (Windows, macOS, OS/2, X/Windows, Android, iOS та інші), використовуються ті самі базові принципи, що були сформульовані і втілені в Smalltalk ще в 60-ті роки.
  9. Ruby або Python.Вам необхідно знати хоча б одну динамічну мову програмування. Сюди ж підходить Javascript, але тільки якщо ви спочатку вивчите саму мову, без будь-яких DOM-моделей, які можуть значно спотворити початкову картинку (React, Angular, VueJS - у всіх них містяться ті самі "DOM-моделі", про які і мова йде .) До речі, як тільки ви розберетеся з Lisp, вам стане набагато простіше розуміти JavaScript.
  10. AspectJ.Знайомство з аспектно-орієнтованим програмуванням повністю змінить ваш погляд на об'єкти, і це чудово.
  11. Haskell, ML, Ocaml або Miranda. Витратьте деякий час на функціональні мови, де відсутні об'єкти.
  12. Bash, або zsh,чи інший сценарій командної оболонки. Тому що далеко не кожна проблема чи завдання у програмуванні має вирішуватись за допомогою повноцінної програми.
  13. F#, Scala, Clojure або будь-яка інша об'єктна/функціональна гібридна мова програмування.Тому що як тільки ви розберетеся з азами і засвоїте базовий набір, до якого належать перші 11 мов програмування з цього списку, ви будете готові до чогось, що зовсім непросто вивчити.
  14. Swift та/або Kotlin. Обидві відносяться до різновидів об'єктно-орієнтованих мов і мають деякі вбудовані функціональні особливості. Вивчивши їх, ви будете готові до роботи над мобільними програмами.
  15. x86 або ARM-асемблер.Вміння читати мовою асемблера дозволить вам налагоджувати код без використання вихідного коду.

Так, я дійсно знаю всі вище перелічені мови. І я навіть викладаю багато з них.

І ні, вам не потрібно знати їх все, щоб стати достатньо компетентним програмістом. Якщо ви хочете стати просто хорошим розробником, вам потрібно знати одну з основних мов (HTML/CSS/Javascript) + мову для бекенд-програмування (найчастіше це C#, Java, Python, Ruby або NodeJS-Javascript) + SQL, якщо ви Ви використовуєте систему управління реляційними базами даних (RDBMS). Цього буде цілком достатньо.

Однак вивчення всіх інших мов – це саме те, що дозволить вам перейти від «пересічної» до «провідного» програміста, а після досягнення максимального рівня знань та умінь.


Нішан Панта, спеціаліст з комп'ютерної інженерії, розробник мовоюPython

Я дотримуюся так званого мовного агностицизму, тому якби хтось під страхом страти змусив мене скласти подібний список, то він би виглядав так:

1. Python. Так як він дуже зручний і простий для прототипування, а також завдяки існуванню величезної кількості фреймворків з відкритим вихідним кодом. Крім того, незайвим буде згадати широко розвинене співтовариство.

2. C. Тому що за його допомогою можна чітко зрозуміти, як усе працює. Відмінно підходить для виконання нескладних завдань.

3. C++.Також до виконання нескладних завдань. Підходить для використання об'єктно-орієнтованих парадигм. Крім того, може використовуватися для інших завдань.

4. Bash.На перший погляд, робота з ним може викликати здивування і навіть деякі труднощі. Однак як тільки ви його освоїте, будь-які процеси автоматизації ви проводитимете за його допомогою.

5 . Scala.Використовується як гібрид функціональної та імперативної мови програмування. З його допомогою можна створити дивовижні речі.

6. Javascript. Найпотужніша мова для веб-розробки. Особисто мені подобається "чистий" JS (варто враховувати, що веб-розробка - це не моє).

7 . Java.Для виконання завдань у об'єктно-орієнтованому програмуванні. І для використання Spring framework.

8 . Haskell. Кожен програміст має знати парадигми функціонального програмування.

9 . PHP.Якщо вам потрібно зробити щось, пов'язане з веб-розробкою. На мій погляд, ця мова точно не є символом зручності та простоти.

10. R. Для статистичного аналізу. Особисто я навіть не пробував з ним працювати, тому що мені більш ніж непогано із самим Python.

11 . HTML.Як я вже казав, зазвичай я не займаюся веб-розробкою. Однак іноді на роботі від мене потрібно показати те, що було виконано в бекенді. У такому разі знання HTML є необхідністю.

12 . Markdown. Одна з найчастіше використовуваних мов розмітки. Як правило, я його використовую для якихось поміток, написання файлу README та багато іншого.

13. VimL / vimscript. Раніше за допомогою VimL я писав скрипти для створення власних плагінів і конфігурацій для vim. Це одна з тих скриптових мов, працювати з якими насмілюються далеко не багато.

14. CSS. Використання CSS іноді зовсім не зашкодить вашому HTML.

15. Matlab/ Octave. З його допомогою я раніше виконував складні обчислення. Але тепер я все це роблю на Python завдяки NumPy.

Естебан Фаргас, займаюся розробкою додатків та беру участь у змаганнях з програмування

  1. Java: Компанія Oracle напевно непогано так приплатила вашому університету, щоб ви вивчали саме цю мову як вступну в об'єктно-орієнтоване програмування. Він також буде корисним, якщо ви хочете брати участь у змаганнях з програмування.
  2. C/ C++: В принципі дуже схожий на вказаний вище Java. До речі, я ці дві мови все ж таки сприймаю як одну.
  3. C#: Непогана мова, що вийшла в результаті змішування двох вищезгаданих мов.
  4. HTML: Є основою усієї мережі. Проте все ж таки не ідеальний.
  5. CSS: Дозволяє красиво виглядати різним речам в Інтернеті. Також далеко не ідеальний.
  6. JavaScript: Дозволяє вибудовувати логічні схеми для Інтернету.
  7. Python: Непогано також мати іншу мову програмування та набір парадигм, щоб написати бекенд для програми. Крім того, на Наразіє загальноприйнятою мовою для технологій машинного навчання.
  8. Ruby: Ще один чудова мовадля створення бекенду. На його вивчення не знадобиться багато часу.
  9. Golang: Зібрав у собі всі приємні функції, які є у різних мовах групи C. Він чудовий. За допомогою його сумісної моделі можна виконувати великомасштабні проекти.
  10. Scala: Також дозволяє створювати справді відмінне професійне програмне забезпечення. Знайомство з функціональною парадигмою може стати вкрай цікавим та щедрим на захоплюючі завдання.
  11. Haskell: Вивчення функціональної парадигми максимальному рівні.
  12. Lisp: Те саме, що й вище наведений Haskell, тільки в ще більш незвичайному варіанті виходячи з неймовірно химерного синтаксису.
  13. Bash: Це взагалі мова чи ні? Так чи інакше, непогано було б ним опанувати як один із зручних інструментів розробника.
  14. SQL:Використовується для роботи з базами даних.
  15. PHP: Мова, яка у минулому столітті використовувалася для створення бекенда.

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

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

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

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

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

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

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

Крім кодування символів, час і дати (Time and Date) є ще однією областю, де багато програмістів, включаючи мене, зазнають труднощів. Навіть старші розробники губляться у 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, сумісність браузерів, поради для зменшення часу завантаження вашого сайту, XML карти сайту, специфікацій W3C і кілька інших ключових моментів.

Що кожен програміст повинен знати про 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), але і вони хороші до вивчення для багатьох початківців та розробників. Переклад статті

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

  • особливості завдань, розв'язуваних людиною в цій спеціалізації, а також співвідносні з ними необхідні навички та знання;
  • специфіка окремих мов розробки програмного забезпечення як основних складових інструментарію програміста.

Розглянемо сутність зазначених аспектів докладніше.

Що має знати програміст для вирішення своїх завдань?

Людина, яка працює програмістом, може займатися вирішенням великої кількості завдань. Серед таких:

  • написання комп'ютерних програм;
  • розробка концепцій ПЗ;
  • адаптація програм до різних категорій користувачів (з погляду інтерфейсу та функцій);
  • тестування та налагодження «софту».

Вивчимо сутність зазначених напрямів діяльності програмістів, а також те, які навички вони повинні мати для успішного виконання відповідних функцій.

Мовна компетенція

Написання програм - головна компетенція спеціаліста профілю, що розглядається. «Софт» створюється при використанні особливих мов, і людина має освоїти відповідний рівень володіння ними. Це, таким чином, є ключовою вимогою до знань програміста.

Що стосується першого завдання, ПЗ може розроблятися для внутрішніх потреб компанії (наприклад, з метою організації роботи з базами даних та обладнанням, управління фінансовими потоками) або зовнішнього споживача (в рамках корпоративного замовлення або за допомогою виведення продукту на роздрібний ринок під комерційним брендом).

Які мови програмування має знати програміст? Це багато в чому залежить від того, які ПЗ він створює. У рамках внутрішньокорпоративних завдань програміст найчастіше працює з базами даних, серверами, налагодженням, тестуванням, написанням алгоритмів керування обладнанням. Дані компетенції, найімовірніше, вимагатимуть знання універсальних, функціональних мов: C, C++, Java, Ruby. Якщо говорити про роботу з базами даних, не обійтися без володіння SQL. Стане в нагоді фахівця знання Python - однієї з найпростіших в освоєнні, але дуже потрібної та затребуваної мови.

Що стосується випуску ПЗ на замовлення на зовнішній ринок, то вимоги до навичок програміста зазвичай ширші - оскільки від функціональності і якості рішень залежить комерційний успіх компанії-роботодавця. Крім зазначених універсальних мов, людині потрібно буде мати більш «вузькопрофільними» - такими як, наприклад, C#, Javascript, PHP, Objective-C.

Трохи пізніше ми вивчимо особливості кожної із зазначених мов докладніше.

Участь у концепції

У компетенції програміста може бути рішення концептуальних завдань, які стосуються створення «софту». Спеціаліст аналізованого профілю нерідко залучений до обговорення проекту розробки ПЗ, оцінює перспективи застосування його практично. Наприклад, програміст здатний підказати колегам, що запропонований продукт не є цілком оптимальним для конкретного виробничого процесу і його проект вимагає доопрацювання в такому аспекті.

У ході вирішення завдань, пов'язаних з концепцією програмного забезпечення, функції програміста також припускають високий рівеньйого мовних знань. Зокрема, фахівець має вміти коректно підбирати оптимальну мову з погляду сумісності з проектом. Наприклад, зазначений нами вище Objective-C - основний при розробці мобільних додатків для iOS, але щодо рішень для Android, то для їх створення один з найоптимальніших інструментів - Java.

Той факт, що завжди знайдеться мова, яка підходить для конкретної платформи краще за інших, - один з основних постулатів професії, це те, що повинен знати програміст-початківець перед початком кар'єри. Тому добрий фахівець даного профілю- однозначно «поліглот» в аспекті володіння комп'ютерними мовами, і він завжди має можливість вибору оптимального «діалекту» для написання ПЗ.

При вирішенні завдань «концептуального» напряму діяльності програміст також повинен мати достатні знання в галузі ринку «заліза»: ПЗ, яке він створюватиме, швидше за все, вимагатиме адаптації до того чи іншого типу комп'ютерів чи гаджетів. Фахівець повинен забезпечити більш якісне, ніж у конкурентних рішеннях, виконання функцій створюваного ним «софту» у співвідношенні з конкретним типом устаткування.

Усі компоненти важливі

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

Вкрай важливо при цьому, щоб елементи керування програмою відповідали побажанням цільової групи користувачів. Важко розробити продукт, задіяння можливостей якого було б комфортабельним для всіх. Обов'язково знайдеться значний відсоток людей, незадоволених інтерфейсом. Найголовніше, таким чином, щоб програміст адаптував рішення для свого споживача. Важливо, щоб насамперед був задоволений саме він.

Пройти тести

Комп'ютерна програма може передбачати широкий функціонал і характеризуватись зручністю інтерфейсу, але якщо її робота супроводжуватиметься постійними збоями та помилками, то відповідні переваги не матимуть жодного значення. Тому розробник ПЗ повинен мати навички, які дозволять здійснювати налагодження та необхідне тестування рішень.

Існує велика кількість видів програмного забезпечення для перевірки коректності програм. Серед популярних – Device Anywhere, Jira, Android Debug Bridge, iPhone Configuration Utility. Програміст повинен вміти користуватися ними, крім, зрозуміло, знань у сфері мов, що застосовуються під час створення ПЗ для платформ, у яких проводиться тестування.

Зазначимо, що у сучасних компаніях програмісти, як правило, працюють у команді. Таким чином, перелічені компетенції найчастіше розподіляються за окремими фахівцями. Наприклад, виявлення збоїв та неполадок у ПЗ може проводити людина на посаді тестувальника. Розробку концепцій, вдосконалення інтерфейсу також здійснюють окремі фахівці. Але нерідко буває, що всі зазначені завдання вирішує та сама людина. Цей сценарій найчастіше зустрічається у невеликих компаніях чи стартапах.

Зазначені спеціалізації деякі IT-експерти вважають за краще ранжувати за рівнем кваліфікації. Так, тестувальники іноді в принципі не розглядаються як програмісти через те, що нечасто працюють із «кодом». Проте вміння перевіряти відповідним чином на помилки - це, так чи інакше, важлива компетенція розробника. Навіть якщо він не зможе віддати програму на тестування комусь іншому, то має провести необхідну роботу сам.

Те саме можна сказати про інтерфейс програм. Фахівець, який має навички дизайнера, швидше за все, краще впорається із завданням оптимізації функцій управління ПЗ, ніж «універсальний» програміст. Але якщо людина працює в стартапі і не має можливості запросити допомогу експерта вузького профілю, то все доведеться робити самому.

Які мови програмування має знати програміст?

Вище ми відзначили, що ключова компетенція програміста - це знання спеціалізованих мов, які використовуються при створенні програмного забезпечення, та перерахували ті, що активно застосовуються на сучасному IT-ринку. До яких сфер бізнесу та IT-розробки найкраще адаптовані ті чи інші мови? Як програмісту визначитися із тим, який саме вивчати?

Отже, серед найбільш затребуваних мов: C, C++, C#, Java, Javascript, Ruby, PHP, Python, Objective-C, SQL. Чим зумовлено те, що сучасний програміст має їх знати?

Стосовно мови C слід зазначити, що він входить до числа найбільш універсальних і найпотужніших в аспекті можливостей. На ньому вдасться створити практично будь-яку програму. Ця мова - дуже складна для вивчення, але це робить особливо почесним її знання. Те саме можна сказати про C++ і додати, що він - ще більш універсальний і затребуваний.

У свою чергу, мова C# не надто близька до C, проте вона взяла багато з C++, а також Java. Що стосується його застосування, він незамінний для програмістів, які працюють із корпоративними типами ПЗ для Windows.

Мова Java багато IT-фахівців називають найуніверсальнішою. Він може бути задіяний практично на будь-якій платформі – Windows, Linux, Mac, у мобільних операційні системи, у веб-розробці. Мова Java відносно складний у вивченні, але за фактом його освоєння програміст зможе вирішувати найширший спектр завдань.

Javascript не має прямого відношення до Java, незважаючи на схожість назви. Використовується він головним чином у сфері веб-розробки. За допомогою Javascript можна здійснювати гнучку конфігурацію веб-сторінок в аспекті зовнішнього вигляду, елементів керування, анімації та інші функції. Тому для тих програмістів, які вирішили заглибитись у створення сайтів, вивчення Javascript – обов'язкове. Аналогічно веб-розробка - основна сфера застосування PHP. Він складний у вивченні і дуже функціональний.

Що повинен знати програміст про мови Python та Ruby? Насамперед те, що незважаючи на простоту вивчення, вони застосовуються в різних сферах. Наприклад, Python активно задіюється розробниками найбільших онлайн-корпорацій – Google, Facebook. Мова Ruby відмінно підходить для невеликих стартапів, але не тільки – наприклад, досвід його успішного використання є у таких великих проектів, як Slideshare та Groupon.

Ринок мобільних додатків - один із найдинамічніших і прибуткових сьогодні. Якщо програміст хоче освоїтися на iOS-платформі, йому слід вивчити мову Objective-C - він, як ми вже зазначили вище, спеціально створений для розробки відповідного типу ПЗ. Якщо людині ближче ринок пристроїв на Android, тоді потрібно вивчати Java.

Мова SQL - серед найпоширеніших до роботи з базами даних. Він відносно нескладний для вивчення, але його знання завжди стане в нагоді фахівцю, який планує будувати кар'єру у великій корпорації.

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

Вивчимо те, якими необхідними знаннями та навичками має мати людина, яка планує стати програмістом.

Що повинен знати програміст-початківець?

Поширена точка зору, що розробляти конкурентоспроможне програмне забезпечення може лише фахівець з математичною або технічною освітою. Саме з цієї причини як іспити на IT-спеціальностях у вузах потрібно складати предмети відповідного профілю. Можна відзначити, що математика - це критерій спроможності програміста, але необхідний його інструмент. Знання в рамках даної дисципліни не гарантують, що людина зможе створювати висококласне ПЗ, однак без них їй буде проблематично освоїти навіть елементарні мови розробки «софту».

Розробник програмного забезпечення займається написанням програм для різних видів комп'ютерів. Ця багато в чому творча професія потребує великої кількості навичок, знань та досвіду. Але перше, що потрібно знати програмісту, це те, які особисті якості мають представники цього середовища. Сфера інформаційних технологійне стоїть дома і стрімко розвивається. Справжній фахівець завжди повинен бути в курсі всіх змін, а значить, йому потрібна велика зацікавленість та схильність до самоосвіти.

Наступне з того, що потрібно знати англійську мову. Кожен розробник володіє ним хоча б на технічному рівніадже за його допомогою буде легше зрозуміти команди більшості мов програмування. Найшвидше у сфері розробки програмного забезпечення розвиваються саме зарубіжні країни. Тому англійська мова стане в нагоді для ознайомлення з найсвіжішими новинами цієї області.

На сьогоднішній день на багатьох факультетах вищих навчальних закладів не лише докладно пояснюють, що потрібно, щоб стати програмістом, а й одразу ж готують фахівців із необхідними базовими навичками у сфері математики та фізики. Однак багато розробників стверджують, що вищу освіту у цій сфері – не головне. Важливіше тут вміти знаходити нестандартні та вдалі рішення у процесі роботи над завданнями.

Наступні пункти з того, що потрібно знати програмісту, залежатимуть від роботи спеціаліста. Наприклад, для розробника сайтів дуже важливі ще й графічними редакторами, а також знання сучасних мов веб-розробки. Одним із них є PHP.

Люди, які замислюються над тим, повинні зрозуміти, що основних знань самої мови буде не зовсім достатньо. Для отримання гарної роботи та гідної оплати необхідно розбиратися в ОВП, що використовується в написанні популярних фреймворків та CMS. Роботи з – наступний етап того, що потрібно знати програмісту PHP.

В даний час буде достатньо ознайомитися з роботою найпоширенішої бази даних - MySQL. Справжній фахівець навряд чи зможе обійтися без мов верстки HTML та CSS. Незважаючи на те, що PHP - це мова сервера, він пов'язаний саме зі збиранням веб-сторінок, написаних на HTML. Також знадобиться знання синтаксису JavaScript і розуміння роботи поширених фреймворків - JQuery або ExtJS. Зараз нескладно освоювати всі ці сучасні інструменти за допомогою численних блогів та онлайн-курсів.

Маючи знання про те, що потрібно, щоб стати програмістом, а також володіючи ними, можна вибирати різні сфери діяльності – написання програм для автоматизації бізнесу компаній, розробка та модернізація веб-сайтів, додатків. При цьому зовсім не обов'язково працювати на постійному місці в будь-якій фірмі. Є можливість самостійно знаходити цікаві замовлення, не виходячи з дому, або організувати свій власний бізнес, що може стати справжнім джерелом успіху. Однак для такого починання будуть потрібні додаткові знання в галузі економіки, управління проектами, юриспруденції.

 

 

Це цікаво: