伊莉討論區

標題: 使用linux寫程式的好處 [打印本頁]

作者: 龍謙    時間: 2018-10-5 10:41 AM     標題: 使用linux寫程式的好處

本帖最後由 龍謙 於 2018-10-5 10:45 AM 編輯

各位大大好
想請問各位大大,在linux寫程式有什麼實際的好處呢?或是為什麼大家都說在linux下寫程式,對寫程式很有幫助呢?
小弟是軟體工程師,平時寫軟體都在windows的環境下,在家也會寫些小程式來玩玩。前陣子看了不少文章,都說學linux有助於寫程式功力的提升;或是許多人都說寫程式的人就該用linux,剛好家中筆電最近想重灌,所以就灌成ubuntu試試看。但跳到ubuntun半個月多,完全沒有這種感覺吔。甚至在安裝linux及要用的軟體的過程中遇到一大堆的鳥問題,每個問題都有好幾種回答,甚至連要找到有同樣問題的就有點難度了,有點累了,開始有想跳回windows的感覺。
感覺光是解決這些安裝問題的時間,我應該可以練習更多的程式,或是學習一些更深入的技巧或知識,而且windows下的visual studio就非常強大,有許多好用的debug工具,為什麼大家還是會提倡要到linux下寫程式呢?
作者: codewice    時間: 2018-10-6 03:11 AM

繞遠一點回答的話,我覺得光是處理系統問題的過程中,你就會學到很多系統的知識。程式寫多了,語法熟悉之後,真的在實作階段,經常需要一些系統的知識來幫你完成目標。

相較於 windows 系統,通常 Unix like 的系統,透明度是比較高的,你更容易知道出了什麼問題,解決問題的方法可能也不只一種。

但我想這不是你想要的 XDDDDD

許多開發的工具,在 Linux 底下相當的完整。objdump, strace... 都很好用。像 Visual Studio 這樣的 IDE,我沒用過但是我猜它也是很強大,整合了許多功能進去。但是 Unix 系統的哲學不太一樣,是希望「每樣工具單純地做一件事情,把它做好」。所以你可能需要搞懂各種工具的用法,然後把它們組合起來。

在這個學習的過程中,你會有更多的機會把單一的項目學好,同時也學到更深入的概念。學的工具多了,各種互相疊加起來能做的事情就會變得很豐富。但是在你各個工具熟悉到一個程度以前,容易覺得挫折而一事無成。

IDE 提供了一個「套餐」,讓你很快地上手,去解決實務上的問題。兩種哲學沒有優劣,看你當下的目標是什麼。

我不了解 VS,也許它也能很輕易地做到後述的事。以前大一用 gcc 開始編譯一些課堂上的作業,逐步地編譯出 .o 檔,link 成執行檔。跑起來的時候看它怎麼 link 到 so 檔....等等這些經驗,後來大二大三的課程中,老師上課講的 compiler 或是系統程式等等,經常就有一種「啊!原來就是這個啊」的感覺。

除此之外,像 python, perl, ruby 這些常見的語言及相關的工具,在 unix-like 的系統上面很容易就能獲得開發資源。

系統也提供了許多工具可以組合使用,常見的 cat, awk, grep, wget, xargs....等等。組合起來可以完成非常多的事情。用 Linux 通常都會建議多用命令列 command line,除了看起來好像比較硬派之外,實際上它也是熟悉之後,以後再學新指令的成本會大幅降低。而且打字打久了,會比滑鼠點來點去還要快。

總結來說,我覺得會是系統的透明度,讓你相對容易地去碰觸系統的細節。因為各項工具的粒度很小,半強迫的要你去搞懂各個環節。過了痛苦的學習期,就會發現能做的事情變得很多。

不論是 windows or unix-like,IDE or command-line tools,能夠熟悉兩者且快速開發的人其實也很多。差別大概是走向大師的路徑不一樣吧。

作者: 龍謙    時間: 2018-10-7 11:25 PM

了解,感恩大大的用心回答!

後來我女朋友介紹了一個較為穩定的版本給我,她研究所時因為論文需要,所以用碰過linux,所以也吃過不少虧,她介紹了xfce ubuntu給我,這個版本真的相對較為穩定,經過兩天的摸索也比較熟了,再加上看了大大的回覆,我決定再試一陣子看看!

不過,如果從事演算法的開發,系統哪方面細節是需要特別了解的呢?
我是從事演算法的研發,大大有提到使用linux可以了解系統的細節,想說大大對我這種演算法研發的有沒有什麼建議,我可以特別研究那些地方。
作者: 龍謙    時間: 2018-10-7 11:26 PM

了解,感恩大大的用心回答!

後來我女朋友介紹了一個較為穩定的版本給我,她研究所時因為論文需要,所以用碰過linux,所以也吃過不少虧,她介紹了xfce ubuntu給我,這個版本真的相對較為穩定,經過兩天的摸索也比較熟了,再加上看了大大的回覆,我決定再試一陣子看看!

不過,如果從事演算法的開發,系統哪方面細節是需要特別了解的呢?
我是從事演算法的研發,大大有提到使用linux可以了解系統的細節,想說大大對我這種演算法研發的有沒有什麼建議,我可以特別研究那些地方。
作者: kk_eyny    時間: 2018-10-8 08:07 AM

ubuntu的話建議使用LTS的版本
如果考慮穩定度
Centos會是更好的選擇

跑演算法的話
直譯式的語言基本上不適合
除非你有很多時間
不然會等到天荒地老
(以上是自己的親身經驗 當時為了寫論文 使用 php 跑了好几個禮拜)

再者跑演算法 linux絕對比 windows穩定非常多


作者: 龍謙    時間: 2018-10-8 09:13 PM

本帖最後由 龍謙 於 2018-10-8 09:17 PM 編輯
kk_eyny 發表於 2018-10-8 08:07 AM
ubuntu的話建議使用LTS的版本
如果考慮穩定度
Centos會是更好的選擇

了解!
我用的是ubuntu 18.04.1 LTS版本,只是介面的部分是用xfce。[attach]125169309[/attach]
使用gnome的介面遇到超多問題,而且很多都很難解;用xfce也遇到一些問題,但沒gnome那麼多,而且現在都解得差不多了。

演算法的部分,我平時都是用c++搭配opencv或halcon開發喔
直譯式語言我從研究所用matlab寫演算法後就很少碰了@@

請問k大對linux的入門有沒有什麼建議,或是強烈建議我可以從什麼地方開始呢?

作者: kk_eyny    時間: 2018-10-9 08:39 AM

鳥哥的站看看
碰到問題 多多爬文
大陸網站資源比台灣多很多
官方forum也可以去看看

作者: codewice    時間: 2018-10-14 09:36 AM

十年來用的各式 distribution,幾乎都是大改版的時候比較需要處理一下設定檔的問題,否則也沒什麼壞掉的情況。也有可能是我修理習慣了,小問題一下就修掉所以沒特別的印象。

就像前面網友說的,裝 LTS 的版本應該就可以撐很久,我自己是用 debian testing,沒事就更新一下系統,所以沒有大改版的情況。

演算法是比較高階的東西,理論上對系統的抽象程度會比較高,意即對系統的假設應該要愈少愈好。除非你的工作是偏向於,對於某個平台上面的效能調整,這種情況下你就要對系統/Kernel 的運作方式要有更深入的了解。

我也是建議先把鳥哥的網站,大致上當作看小說一樣粗看一遍,不懂的地方沒關係,至少知道大致講過哪些東西,未來遇到問題比較知道去哪找解答。

先好好學會你用的 distribution 的套件管理程式,認真地看完官方文件,了解怎麼解決一些相依性的問題。Linux 下最常遇到的就是套件衝突[1],其次就是套件升級然後設定檔不相容。搞懂套件管理程式怎麼用,就能知道遇上衝突要怎麼解決。如果設定檔出問題,通常官方的論壇或是 issue tracker 都會有討論要怎麼改(弄壞很快就會有人去報 bug,然後 maintainer 就會講解法 XDDD)。

[1] Linux 上面的程式/函式庫許多都是各別開發者在貢獻,每個人在開發的時候對系統環境的假設不一樣,所以常常會有「在你那邊不會動?可是在我這邊動得很好耶」的情況。發行 distribution 的公司(如 Canonical 之於 Ubuntu) 就會投注人力在整合各個套件。但是套件數量多,衝突就總是有可能發生。
作者: xchou    時間: 2022-3-11 10:07 PM

本帖最後由 xchou 於 2022-3-12 07:11 AM 編輯
codewice 發表於 2018-10-14 09:36 AM [url=forum.php?mod=redirect&goto=findpost&pid=312305191&ptid=11942604][/url]
十年來用的各式 distribution,幾乎都是大改版的時候比較需要處理一下設定檔的問題,否則也沒什麼壞掉的情 ...

需要使用到什麼功能再去谷歌查尋,比較有效率,LINUX太博大精深了。




歡迎光臨 伊莉討論區 (http://a408.file-static.com/) Powered by Discuz!