Я буду впевнений у собі, коли навчаюся програмувати [закрито]


10

Я хочу навчитися програмувати "захищеним від майбутнього" способом, якщо хочете. Хоча Windows домінує на ринку настільних ОС (поки що), очевидно, що в навчанні її мовам / рамкам / API і так далі є велике значення - це може змінитися, коли з'являться нові пристрої або Windows стріляє в ногу (над -дружні перегляди Windows 8 не виглядають занадто привабливими ...).

Я би мав рацію, думаючи, що володіння ґрунтовними знаннями C / C ++ для резервного логічного / низького рівня програмування тощо, у поєднанні з надзвичайно портативною мовою, такою як Java для GUI тощо, буде гарною основою для розробки програмного забезпечення що виявиться корисним для найбільшої кількості систем? - Я кажу на настільних ПК, планшетах, телефонах.


11
Немає такого
Job

Побудуйте вертеп і заповніть його книгами.
Едвард Странд

4
Побудуйте вертеп і наповніть його консервами. Найбільш стійкий до майбутнього програміст - програміст, який живий після апокаліпсису.
Том Андерсон

1
Не вивчайте мови програмування чи кодування, але в основному вивчайте програмування, і це займає багато років , майже десять, і ви повинні продовжувати вчитися все своє життя
Василь Старинкевич,

Відповіді:


31

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

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

Ви також можете попрацювати над гарною концепцією програми, перехід на ООП та АОП - хороший вибір ІМО. Але не просто розумійте механізм, а по-справжньому працюйте над філософією, що стоїть за механізмом.

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

Також перейдіть на добрі практики. У вас часто є десяток способів зробити щось, але більшість з них - це лайно: схильні помилки, важко підтримувати, важко зрозуміти пізніше або іншим програмістом тощо. . . Зазвичай код важче читати, ніж писати. Тому навчіться витрачати трохи більше зусиль на написання, щоб полегшити читання (адже ви прочитаєте код більше, ніж пишете).

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

Тоді вам знадобиться загальна технологія. Я говорю про дуже широкі знання, як, наприклад, як працює процесор (пропуск кешу чи прогнозування гілок - це гарний старт), про системи UNIX, про мережеві протоколи, такі як IP, TCP та Ethernet тощо. . .

Зрештою, навчитися вчитися. Якщо ви вмієте вчитися, то можете адаптуватися.

Вам знадобляться міцні знання з конкретних технологій, щоб знайти роботу, але вони застаріли дуже швидко (подумайте, наприклад, про COBOL або веб-програмування під час війни IE / Netscape). Тому не покладайтеся на них, щоб вони були надійними. Вони будуть визначальними для прийняття на роботу, але остаточно не те, що робить відмінного програміста, а те, що зробить ваші навички стійкими з часом.

EDIT: Якщо ви тільки починаєте, вам слід остаточно щось зробити. Що-небудь, насправді. Така гра, як тетріс чи змія - це гарний початок та розвага. Якщо у вас нічого не виходить, ви витратите багато часу на навчання і дійсно не отримаєте досвіду, необхідного для повного розуміння того, що ви дізнаєтесь.

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

Отже, остаточно, зробіть справи, вони навчаються на ваших помилках. Я більше не можу наполягати: РОБИТИ РОБИТИ !


Добре ... Чудова * відповідь і щось, що я розумію - я розумію необхідність розуміння теми "програмування" в цілому, а не в кожній із згаданих вами тем. Я не надто переживаю, як знайти роботу в цій галузі, оскільки в мене є добре оплачуваний список управління електронною комерцією, яким я безумовно задоволений передбачуваним. Моя зацікавленість у програмуванні я б класифікував як серйозне хобі, хоча хотів би використовувати його для покращення як мого, так і інших робочих процесів на роботі.
Анонімний

Додано зміни, щоб зробити речі зрозумілішими як точки зору для початківців.
deadalnix

4

Що відрізняє хороших програмістів від поганих - це їх здатність програмувати будь-яку мову. Як зазначали інші плакати, знання будь-якої важливої ​​об'єктно-орієнтованої мови дасть вам інструменти для створення чудових програм та користування попитом.

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

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


Я вдячний, що добре знання понять програмування є важливим для того, щоб бути хорошим "у цій грі", але знання власного синтаксису / стандартної бібліотеки мови та того, що ще не є надзвичайно важливим для використання всіх можливостей мови (де це доречно). На жаль, я ще не в школі, працюю, хоча, як я думаю, що я говорив у попередньому коментарі, я досить добре оплачений, тому не надто переживаю з цього аспекту. Дякую за відповідь. =)
Анонімний

4

Відповідь від @deadalnix хороша. Я до цього додав би три речі:

  1. Інформація про багаторазове використання надходить із середини, а не з крайнощів. Мінський докладно це презентує у своїй книзі «Товариство розуму», тому я просто підсумую це як: верхній шар занадто близький до конкретного рішення для більшої частини, щоб застосувати до наступної проблеми, тоді як нижній шар занадто близький до конкретна платформа для більшої частини, яку можна застосувати до наступної проблеми. У середньому шарі знайдеться інформація про багаторазове використання - алгоритми, зразки, таксономії, тактики, стратегії, методи, організації, протоколи тощо, які, як правило, корисні для вирішення подібних проблем незалежно від домену (верхній рівень) або платформи (нижній шар ). Примітка: ці шари не мають нічого спільного з трирівневою архітектурою, ми говоримо тут про семантику проблем-простір / рішення-простір.
  2. ви не знатимете, що є загальним / загальним / багаторазовим, поки ви не побачите принаймні два екземпляри цього. Отже, вивчіть, як Windows працює внутрішньо, потім вивчіть, як linux / unix працює внутрішньо, і порівняйте два. Загальні речі багаторазові. Різні речі - це дизайнерські рішення, які також можуть спричинити багаторазове розуміння.
  3. для будь-якої ситуації або проблеми подумайте, як ви могли б реалізувати рішення, а потім порівняйте рішення свого крісла з фактичним рішенням і спробуйте зрозуміти можливі причини, що лежать в основі відмінностей.

Чудові доповнення!
deadalnix

2

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

Отже, на початку не надто замислюйтесь над тим, щоб бути "стійким до майбутнього". Однак, по мірі прогресу, постарайтеся оволодіти мовами, які сильно відрізняються одна від одної. В основному, (як ви вже сказали) вам слід зручно користуватися мовою низького рівня (-ish), такою як C / C ++, мовою програмування вищого рівня, такою як Java, а також мовою сценаріїв (Python, Ruby тощо). Якщо ви хочете зайнятися справді вдосконаленими речами, ви також повинні знати збірку.

Але не підкреслюйте себе занадто сильно з цього приводу. Навчання програмі займає роки. На даний момент просто виберіть таку мову, як Java або C # або будь-яку іншу, і перейдіть до неї. :)


Мені подобається "вибрати одного" і подумати за його ставлення ... Я, мабуть, його прийму. Так чи ні, обирати одну мову низького рівня (C), один високий рівень (Java) та одну мову сценаріїв (Python) та вивчати всі 3 одночасно?
Анонім

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

Я б не сказав, що тільки починаю - я знаю html / css роками (хоча вони насправді не кваліфікуються / не мають значення) і будують веб-сайти PHP / MySQL протягом декількох місяців. Розробка веб-сайтів, з якими я можу «перейти», я вирішую розробку програмного забезпечення. Я прислухаюся до того, що ти кажеш.
Анонім

If you want to go into the really advanced stuff you must also know Assembly- Ви можете це зробити в будь-якому рівні, виклики просто різні.
шістдесят футів

1

Я би мав рацію, думаючи, що володіння ґрунтовними знаннями C / C ++ для резервного логічного / низького рівня програмування тощо, у поєднанні з надзвичайно портативною мовою, такою як Java для GUI тощо, буде гарною основою для розробки програмного забезпечення що виявиться корисним для найбільшої кількості систем?

Я говорю про настільні ПК, планшети, телефони.

Ні. Ніщо з цього не допоможе.

Добре знання структур даних та алгоритмів - незалежних від будь-якої конкретної мови програмування - цінніше, ніж "програмування низького рівня тощо".

"Надзвичайно портативна мова, як Java" така ж портативна, як і C, і не допомагає. Next Big Thing буде настільки відрізнятися від цих мов , що ваш супер-портативний Java буде відповідальність, не є активом.

Mac OS (настільний ПК, планшет і телефон) зроблено в цілі C. Це може бути місце для початку.

Windows (настільний стіл, стіл та телефон) зроблено на C #. Це може бути місце для початку.


Я порівнював Java з C як обома портативними мовами - при цьому Java є низьким і високим рівнем відповідно, що це правда ... Як ви самі сказали, Mac OS = Obj-C, Windows = C #, що є там, де я не хочу спеціалізуватися на одному і відрізати свої варіанти, або і те, і інше, і бути "майстром нікому", якщо ви спіймаєте мій дрейф. Я ціную те, що ви говорите, але ґрунтовне знання структур даних та алгоритмів, які не знають мови програмування, так само марно, як і знання мови програмування без останньої.
Анонім

@Chris Bridgett: Ви повністю помиляєтесь із суть. Є універсальні основи, а мова програмування - це не те. Спочатку вивчіть основи. Тоді мова (або ОС) просто заморожується на торті. Основи - це торт і є надійними для майбутнього.
S.Lott
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.