перехід від Windows до Linux [закрито]


57

Мені потрібно узгодити ці 2 факти:

  1. Мені не комфортно працювати в Linux;
  2. Мені потрібно розробити програмне забезпечення для Linux.

Деякі передумови: у мене 10+ років досвіду програмування в Windows (майже виключно C / C ++, але деякі .NET також), я був користувачем FreeBSD вдома близько 3 років або близько того (тоді довелося повернутися до Windows), і мені ніколи не пощастило з Linux. І тепер мені доводиться розробляти програмне забезпечення для Linux. Мені потрібен план.

У Windows ви можете піти з просто знання мови програмування, API, який ви кодуєте, свого IDE (VisualStudio) та деяких дуже основних інструментів для усунення несправностей (залежно, ProcessExplorer, DebugView, WinDbg). Все інше відбувається природним шляхом.

В Linux це зовсім інша історія. Звідки я б знав, що завантажуватиме DLL (вибачте, Shared Object), якщо я посилаюся на нього з плагіна Firefox? Що таке еквівалент Linux для вставки __asm ​​int 3 / DebugBreak () у джерело та запуску програми, а потім дозволити ОС викликати відладчик? Чому білі версії випуску використовують щось, що називається appLoader, а збірки налагоджень працюють якось інакше? Найгірше: як забезпечити середовище розробки Linux?

Отже, беручи до уваги те, що ненависть зазвичай пов’язана з недостатньою обізнаністю, що б ти порадив? Я все в порядку з Emacs та GCC. Мені потрібно виховувати себе як адміністратора / користувача Linux, і мені потрібно навчитися належним інструментам усунення несправностей (strace cool, btw), еквівалентам тим, про які я згадував вище.

Чи потрібно робити Linux з Scratch? Або мені потрібно просто прочитати деякі книги (я читав "Середовище програмування UNIX" Керніган та "Розширене програмування ..." Стівенса, але мені потрібно навчитися чомусь більш практичному)? Або мені потрібен якийсь дистрибутив Linux на домашньому комп’ютері?


73
Я відчуваю те саме щодо Windows

15
Вважаєте, що отримаєте іншу роботу, з якою вам зручніше?

3
У Unices man- ваш друг. Я б man nmі man ldяк відправна точка.
дієтабудда

1
почніть використовувати Windows;)
Jigar Joshi

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

Відповіді:


62

Стаття Динамічне посилання в Linux та Windows може бути цікавою, де пояснюється, як кожна ОС робить динамічне посилання. У статті " Спільні шляхи пошуку бібліотек" пояснюється спосіб знаходження бібліотек. Також статичні, спільні динамічні та завантажувані бібліотеки Linux дуже хороші. Приємна річ у бібліотеках Linux полягає в тому, що вони мають кращу підтримку версій і мають кілька версій бібліотеки навколо Windows (AFAIK, я не роблю Windows). Дивіться версію бібліотечного інтерфейсу в Solaris та Linux для цього. Ці статті справді повинні вас охопити бібліотеками.

GDB дуже потужний, гарне введення - це, мабуть , навчальний посібник з gdb RMS . Ви можете прочитати на умовних точках перерви. Щоб еквіваленти __asm(int 3)бачили питання Встановіть точку розриву в коді C або C ++ програмно для gdb в Linux .

Книга « Розширене програмування Unix» від Марка Рочкінда - це обов’язково прочитана ІМХО. Має безліч прикладів і дуже добре пояснює всі теми POSIX / SUS. Це найкраща книга на цю тему, яку я читав до цих пір.

Але для того, щоб полегшити ваше життя, я фактично рекомендую використовувати API високого рівня, який резюмує такі речі, як Qt. Також набагато простіше писати крос-платформу.

Робота Linux з нуля допомагає зрозуміти, як складається система Linux, але я думаю, що це не дуже покращує ваші знання про неї з точки зору розробників. Це робить вас більш комфортними з Linux, хоча ви дізнаєтесь, які саме частини є в середовищі Linux (і частково також чому ). Linux не стане для вас великим blackbox після роботи через Linux From Scratch.


Звичайно, в 32-бітовій системі це переривання перейде в налагоджувач, якщо процес вже налагоджений . Ось це, якщо я про це запитую. Windows дозволяє приєднати налагоджувач після того, як трапилася пастка. За деякими сценаріями це надзвичайно зручно. І дякую за посилання!
rincewind

6
Чудова відповідь! Зауважте, що для підручника gdb RMS - це "Ryan M. Schmidt", а не "Richard M. Stallman." (важлива примітка, оскільки Стенлман був первинним автором GDB)
ентропо

У Windows протягом майже 12 років підтримується завантаження бібліотеки " Side-by-Side" ( msdn.microsoft.com/en-us/library/ms229072(v=vs.80).aspx ). Тож ви скоріше помиляєтесь щодо версій.
Клаус Йоргенсен

16

Якщо вам подобається strace, не забувайте ltrace: еквівалент бібліотечним дзвінкам.
Також так, я рекомендую Linux From Scratch . Це гарна вправа в розробці основних елементів ОС та їх сумісності.
Для сучасного, повного посилання на системне програмування я рекомендую підібрати інтерфейс програмування Linux .


12

Mac OS X схожий на Mercedes; це найкрасивіше і найчистіше, але коштує багато. Windows - це як Toyota; це поверне вас туди і назад.

Linux - це як гарячий стрижень; Це люди, щоб копатися і розбиратися і знову збиратися разом. Linux не для тих, хто просто хоче використовувати комп’ютер; це для людей, які люблять комп’ютери. Люди, які не люблять комп’ютери, повинні триматися подалі від нього.

Те, що ви дізналися в Windows, не буде перекладати дуже добре, ні. Але ви можете побачити внутрішні та спостерігати за робочим двигуном.

Спробуйте взяти Linux як нову іграшку, з якою ви можете грати і повзати і бачити, що відбувається. Легкі речі в Windows важче в Linux; речі, які неможливі в Windows, можливі і в Linux.

Якщо ви любите комп'ютери, ви можете любити Linux; якщо ви не любите комп’ютери, чому ви взагалі програмуєте?


13
+1, для " Легкі речі в Windows важче в Linux; речі, які неможливі в Windows, можливі в Linux ". Я додав би: «В той час як Windows штовхає попередньо перетравлену їжу в рот, з Linux у вас є можливість готувати, і винагорода за це те, що ви їсте те, що вам подобається » ... Звичайно, їстівне це чи ні багато що залежить від того, наскільки ви гарний шеф-кухар ...
Ален Паннетьє

14
@Andy: "Windows - це як Toyota" . Toyota має набагато кращу якість, ніж Windows.
Відновіть Моніку

4
@ SK-логіка, точно. Не вступаючи в чергову релігійну війну, будь ласка, врахуйте наступне. З просто стратегічних та фінансових причин МС націлена на найбільшу можливу аудиторію. Технічні речі, якими користувачі, які володіють комп'ютером, хотіли б керувати, ховаються далеко з поля зору, щоб у Джонс не виникало проблем. Ви закінчуєтесь бюрократією скрізь: DEP, GPO, "Довірений інсталятор", приватні або приховані API, "саморемонтується завантажувач" тощо. Geeks не виправляє Windows, вони просто відмовляються. Linux не має однакової гегемонічної мети; це робиться користувачами для користувачів. У цьому вся суть.
Ален Паннетьє

3
@ SK-logic - "якщо у вас є джерела Windows" ... :-)
Rory Alsop

3
"Розум називає кілька речей, які" неможливо в Windows "і" можливо в Linux "- я знайшов помилку в системному сценарії Linux і виправив її. Я знайшов помилки в Windows, але так і не зміг їх виправити. Припустимо, мати образ ISO (CD) у файлі диска; я можу це встановити як диск в Linux; чи можна це зробити в Windows? І пам’ятайте, що майже все в Linux безкоштовне, і майже все в Windows вимагає дорогої власної програми.
Енді Кенфілд

9

Як ви розвиваєтесь на Mono з Monodevelop? Це дозволить вам почати досить легко, повторно використовуючи свій досвід у .NET.


Я нещодавно спробував це - звичайно, деякі відмінності від Visual Studio, але я вечір працював. Це великий шлях міграції.
JBRWilkinson

8

Це дивовижно, коли ви дивитесь на це з самого початку (так само, якби у вас був розробник Linux, який мав завдання виконати певну розробку Windows). Я б вирішував цю проблему за один раз.

  • Спочатку знайдіть налаштування середовища (компілятор, IDE - так вони існують, Netbeans / Eclipse тощо)
  • Далі встановіть apis вищого рівня (boost / Qt тощо)
  • Почніть повільно, якщо є негайна проблема, вирішіть, скомпілюйте код (або почніть писати з нуля тощо). Як би ви вирішили будь-який проект розвитку, спочатку знайдіть потрібні вам речі (тобто речі, які не потребують конкретної ОС взаємодія), а потім, коли ви потрапили на корч - пошук, я впевнений, що хтось там натрапив на ту ж проблему і вирішив її.

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


1
+1 Nim: StackExchange має надзвичайно багато попередньої інформації. Мені найбільше подобається смак Unix, але в даний час працюю в середовищі розробки Windows і шукаю SE відповів майже на всі мої запити за дуже короткий проміжок часу.
Rory Alsop

6

The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.

Скільки часу вам знадобилося, щоб ви стали досвідченими працювати в середовищі Windows. Можна сказати, що ви просто почали. Але ви мали кілька років роботи з вікнами до цього. Як довго ви користувались вікном, перш ніж писати програму кулака. Мені це було 8 років, але все, що я зараз використовую Linux майже виключно 5 років. Зараз я більш досвідчений у Linux, ніж у Windows. Ви повинні приділити себе як мінімум стільки часу, щоб ознайомитися з новою системою.

Почніть зі списку програм, з якими ви не можете жити у вікнах, і шукайте альтернативи у * nix світі. http://alternativeto.net/ та розділи для подальшого читання у Вікіпедії можуть бути тут корисними.

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

Інші корисні ресурси при переході від однієї системи до іншої

Про те, як стати кращим користувачем енергії або користувачем адміністратора, ознайомтеся з цими ресурсами

Це також звучить так, що минуло час, коли ви подивилися на * nix світ. Я б порекомендував кілька нових версій дистрибутивів від Fedora , suse , debian або моєї кращої робочої станції Ubuntu .

Тепер, напевно, ви можете піти з невідомих внутрішніх систем і просто основ, як у Windows. Я б не просто намагався піти з мінімуму. Якщо ви бачите Linux як інструмент, який насправді допомагає вам у вашій розробці, а не добросовісно операційній системі, в якій ви розробляєте, було б корисно.

Linux From Scratch буде набагато важливішим, якщо ви спеціально розробляєте для Linux дуже специфічний та технічний сенс. IE ви хочете розробити для ядра або порту, який ви програмуєте на суперкомп'ютері, на якому працює Linux. Було б дуже корисно ніколи. Я думаю, що ти, мабуть, можеш залишити це на кілька місяців, поки ти просто намагатимешся перейти в Ubuntu. Ubuntu буде максимально наближений до речей, які просто працюють з Mac і Windows.


1
Debian не зовсім новий дистрибутив. :-P Хоча це все-таки хороший вибір.
Стів S

Ні SuSE, ні Fedora ... SuSE вже 15 років, Fedora справді є одним із «молодших» дистрибутивів, яким є 8 років. Все-таки +1.
DarkDust

1
@Darkdust @ Steve-s новий, як і в останніх випусках,
nelaaro

6

Я думаю, що ти відповів на своє запитання у запитанні

"У Windows ви можете піти з просто знання мови програмування, API, який ви кодуєте, свого IDE (VisualStudio) та деяких дуже основних інструментів для усунення несправностей (залежно, ProcessExplorer, DebugView, WinDbg). Все інше відбувається природно. "

Здогадайтесь, що в Linux ви можете піти з просто знання мови програмування, API (або пари), вашого IDE (Eclipse або NetBeans, навіть Geany, Emacs або vim, якщо хочете) та деяких основних інструментів для усунення несправностей ( gdb, засоби пошуку, lint, htop, ps).

Ви багато інвестували в екосистему програмування Windows. Значна частина цього (сподіваємось) абстрактних знань (що таке компілятор, налагоджувач, спільна бібліотека, процес, потік? Що вони роблять?), Які легко перейдуть, як тільки ви швидко наберетеся на різних інструментах. Деякі стосуються домену (з чим пов’язаний DLL, коли я додаю X до проекту?), Але навіть перехід від одного класу мови до іншого в Windows вимагає нового вивчення.

Встановіть Ubuntu або Fedora у віртуальній машині, прочитайте деякі навчальні програми C ++ Hello World в Eclipse або NetBeans, а також деякі налагодження в навчальних посібниках Eclipse / NetBeans, і дозвольте вашому мозку природну здатність адаптуватися перейняти. Це перекладе ідеї для вас, якщо ви розслабитесь та просто попрацюєте.


3

Я навчився Unix взагалі, читаючи чоловікові сторінки. Ви повинні хоча б їх знехтувати. Так, я маю на увазі їх усіх. Метод, який я використовую, використовує його для введення в довідники сторінки man і для їх атаки по одному розділу.

Я використовую це:

for i in *; do f=`basename $i .gz`; man `basename $f .1` ; done

... замінивши .1 номером розділу, який ви читаєте, .2, .3 і т. д. Натисніть ctrl-Z ctrl-C, щоб вийти з циклу. Пробіг може змінюватися, якщо ваш дистрибутив Linux зберігає речі по-іншому, тобто не як cmdname.1.gz.

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


2
Я б запропонував створити xmanбільш "дружній" інтерфейс. Виберіть розділ, натисніть довідкову сторінку, прочитайте її. Промийте, повторіть.
ΤΖΩΤΖΙΟΥ

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

3

Не змушуйте себе робити щось, що вам не подобається. Використовуйте Windows як своє середовище розробки, пишіть переносний код, крос-компілюйте його для Linux і лише час від часу тестуйте його у віртуальній машині.


2

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

Можливо, щось на цих лініях?

Взагалі кажучи, мій інтерес і довіра до GNU / Linux прийшов через те, що він набагато більш вибагливий (і вимагає майстерності в перші дні), ніж Windows. Мені потрібно було возитися з великою кількістю речей, щоб налагодити роботу, і це допомогло мені навчитися багато чого. Зараз набагато краще, але всі ці години допомагали.


2

Мені було одне з двох завдань на щось подібне, але різне. Я працюю в шкільному окрузі К-12, і бізнес-система (HR, фінанси, тощо) переходить з HP3000 / TurboImage db на платформу Linux / MS SQL. Мені комфортно зі стороною MS SQL. Але не стороною Linux. Ми вдвох на стороні адміністратора, а не на стороні програмування. Програмування проводиться назовні - стороннє діловий додаток для К-12 оргів.

У вихідні я взяв клас «Вступ до Linux» (Redhat) на 5 вихідних - це робилося здебільшого в режимі командного рядка - і для мене це було варто часу, як швидкий стрибок у спосіб Linux робити щось. Очевидно YMMV залежно від класу / вчителя.

Ви згадали "Найгірше: як забезпечити середовище розробки Linux?" Оскільки ви вже дуже добре знайомі з Windows, я настійно пропоную вам отримати копію vmWare Workstation. Завдяки цьому ви можете зберігати Windows як свою робочу станцію та встановлювати Linux як гостьові системи - видаляти, промивати та повторювати за потребою. Коли ви отримаєте гарне налаштування, я вважаю, що ви можете зробити його знімок, але я не можу точно сказати, які версії здатні зробити момент зйомки. І якщо ви їдете маршрутом vmWare Workstation, щоб увімкнути декілька налаштувань розробки - обов'язково підсилюйте пам'ять.

Я також не проти рекомендувати використовувати CentOS як ОС Linux для гостей. Як я розумію, це як RedHat без брендингу та / або продажу та / або витрат на підтримку. Я не знайомий з іншими смаками Linux, тому не можу дати їм інформацію.

Грег


1

Мені подобаються обидві платформи і за всі відмінності в користувальницькому інтерфейсі та екосистемі розробників, я вважаю їх схожими, ніж різні під прикриттям. Насправді, для більшості концепцій Windows ви можете знайти еквівалентні поняття Linux лише за допомогою пошуку в Інтернеті.

Сказавши це, я настійно пропоную навчитися робити речі "Unix way". Використовуйте командний рядок, а не глючні графічні інтерфейси інтерфейсу (я тут говорю переважно про gdb); не шукайте IDE і навчіться використовувати набір спеціалізованих інструментів замість цього. Виберіть хорошого редактора (вказуючи на vim) і добре його вивчіть. Прочитайте, як це makeпрацює, навіть якщо ви не плануєте стати експертом. Можливо, вам навіть сподобається Linux. З ним весело і весело грати.


1

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

Тоді MS змінила будь-яку систему програмування, якою вам було зручніше, на .NET, і ви більше нічого не знали про DLLS, COM та інше, вам довелося вивчати такі речі, як збірки, GAC та домени додатків. Ви дізналися ці добре.

То чому ви зараз переживаєте робити те саме з Linux?

В Інтернеті є безліч навчальних посібників "Почніть" для будь-яких середовищ програмування. Тепер ви кажете GCC, тож я припускаю розвиток C ++. Отримайте собі Eclipse, встановіть CDT (c dev tools) поверх своєї платформи Eclipse (Eclipse - це багатоцільовий IDE, ви можете використовувати його для C ++, PHP, Java, будь-що інше - але вам потрібно встановити інструментарій для вашої мови так як ви б не хотіли, щоб усе це було попередньо встановлено, як VS, і для встановлення потрібні 3 дні :))

У всьому Інтернеті є зручні підручники. Тут є IBM, який є досить вичерпним.

Інструменти для налагодження ... eclipse вбудований ( підручник ), але ви можете знайти безліч інструментів, таких як згадані вами, просто пошукайте в Інтернеті, і ви знайдете безліч варіантів. Вам знадобиться трохи часу, щоб розібратися, як читати основний дамп (на відміну від Windows userdump, наприклад), але ви туди потрапите.

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


0

Я не думаю, що вам потрібно робити Linux з Scratch. Якби я був ти, я б пішов на Ubuntu. Це зручніше, і базуючись на debian, є багато технічного матеріалу.

Якщо ви хочете більше вперше зануритися в Linux, Gentoo - хороший варіант. Це вимагає від вас досить багато прочитати про конфігурацію та ядра, але це також дає досить функціональну систему для роботи в af


0

Google "Мистецтво програмування Unix" і читайте його. IMO, ваша основна складність полягає в різній філософії, і ця книга є чудовим для цього читанням.

Він також знайомить вас з деякими неочевидними, але технічно дуже важливими відмінностями між системами * n * x і Windows - вони є ключовими для розуміння того, що робити інший спосіб має сенс в Linux.


1
... і він також пропонує вам безліч інструментів та методів використання в Linux.

0

Перше питання, яке я задаю, - це що ви хочете розвивати? Якщо це додаток на основі gui, то це може відрізнятися від необхідності написати щось на зразок розширення ядра.

Що стосується програми gui, я вважаю, що найпростішим методом є використання Qt, який має власне середовище розробки (Qt-Creator) і є кросплатформенним, що дозволяє вивчити лише один API, який можна використовувати для Windows / Linux / OSX і навіть мобільний розвиток. Як і візуальна студія в Windows, або XCode в OSX, ви можете створювати та розміщувати вікна та елементи з графічного редактора, а API дуже легко підібрати з навантаженнями зразкових програм.

Якщо вам потрібно отримати більш низький рівень, то, як тільки ви знайдете свій шлях навколо Linux в командному рядку, знаєте, як переходити в каталоги, маніпулювати файлами, розуміти дозволи та ін., То й починайте читати, як скласти просту програму з gcc, як пов’язати файли та запустити виконуваний файл, а потім як налагодити gdb.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.