伊莉討論區

標題: 學習C & C++ 的市場價值 [打印本頁]

作者: lp.tsai    時間: 2015-11-30 02:29 PM     標題: 學習C & C++ 的市場價值



懂得C語言,不見得懂C++;但要學C++,C語言一定要有相當的基礎。

與硬體相關的程式設計,概略上區分如下:
如果是MCU市場,C與Assembly語言都是不可或缺的必備程式語言重點。
如果是MPU或SoC市場,C與C++語言都是主要的使用程式語言。


當然還有Java、Perl、Javascript、LUA ...,但純以C vs. C++ 做比較。




但重點來了,這市場那麼大,為何台灣的人才那麼少?


資深的Embedded system軟體研發人才一旦退休,年輕人是否可以接棒?


比其寫應用程式而言,熟悉軟硬體設計可以寫韌體獨立開發產品的人越來越少,前(錢)途無限!!!

其實如果有注意到一點,以目前整個產業的軟體技術特別是MAKER的市場,

越來越趨向硬體產商需配合軟體供應鏈,才能尋求絕佳的市場空間,MBed與Ardunio都是如此。

這些開發的工具比以前容易太多了,雖然學習之路很辛苦,努力付出就會有所獲得,總比領22K整天喊著社會不公與低薪來的好多了。



作者: chevylin0802    時間: 2015-12-2 03:12 PM

本帖最後由 chevylin0802 於 2015-12-2 03:39 PM 編輯

我是認為你搞錯了問題的方向

在以前Internet還沒發達之前的年代
寫作軟體的程式設計師或軟體工程師沒有別人的程式原始碼可抄
每一個人都只能夠靠自己寫

在我上大一的那一年
大一上的計算機概論課就要寫程式
一個學期內要學會Fortran跟Forth
到了大一下的時候上資料結構學的是Pascal
全部都在VAX系統的終端機撰寫
而且當初的環境就只有vi跟ed可以用
交報告都要等列印出來的報表
當時PC/XT才剛問世不久
可以說那三種程式語言在一個學年的時間都要會寫

C當時剛出來而已
所以不用提到C++
因為當時的環境根本就還沒有C++

C還沒有成為軟體界的霸主之前
Pascal可以算是在那個年代裏最紅的程式語言
但是........
無論是Fortran, Forth, Pascal都沒有程式庫這種玩意
你只能使用那些極其有限的程式庫且多半都是屬於數學函數

C之所以在當時可以短短幾年間就流行起來
要拜寶蘭公司在PC版的Turbo C所賜
那是全世界第一套IDE環境
雖然是在文字模式下的IDE
但已經很了不起了
整合了debug的功能
直到現在所有的IDE環境無一不是從這個原型出來的
C之所以成為主要的程式語言
主因就是因為它在編譯連結過程當中
可以連結外部的程式庫
不管是動態連結還是靜態連結
這使得程式庫可以獨立開發而不再受限於單一程式的用途
這也意味著程式庫可以成為獨立的專案
而未必需要基於某一隻特定程式開發
這些都是現在的年輕一批的人無法去感受的事情
他們無法理解當年C還沒有普及以前的年代裏作業系統並沒有library的情況
事實上就連MSDOS開機碟片也一樣並沒有.lib或.dll這種副檔名的路徑
一直到了windows 3.0之後, dll檔才開始成為可動態連結的程式庫副檔名
而在那之前每一隻程式都沒有外部連結的程式庫
外部連結程式庫 dll 或者是C的靜態連結程式庫 .lib
都成為C語言推展的助力
程式庫代表著的是可重覆使用 reuseable
而標頭檔.h則成為程式介面移植時最重要且不可或缺的一環

internet出現之後
漸漸的為了抵制商業唯利是圖的假借智慧財產權的保障行剝削程式設計師之實的問題
所以開始有了自由軟體組織而其有限制用途與無限制用途的各種公開免費的開源碼
加速了更多人投入研發各式各樣的軟體應用與程式庫

但是問題來了
歐美人樂意開放原始碼讓人修改讓人運用
台灣人呢?

首先我必需要講的是
台灣根本就沒有從頭開始就規畫與發展大型軟體專案的環境
也從來沒有長久持久性的研發專案
不像國外
有所謂的長達十數年持續不斷研發的軟體專案
比如影音多媒體類的ffmpeg, vlc
比如opencv, opengl, openal....等
而你能看到的
卻是台灣人很會爬文很會上網把這些別人寫好的原始碼下載下來利用
頂多自行修正了那些原始碼的bug
但從來就不曾回饋給那些開源組織

才講了台灣人的懶惰與投機
就有人說只要懂得用API就好了
哪還需要從頭到尾去開發
光憑那些人的心態就可以了解一般
跟用什麼程式語言寫
半毛關係都沒有
只要光憑那堆人只懂得想利用現成別人寫好的東西再去發展
就已經知道"沒救了"
用不著再多講

Embedded System哪有什麼Know how可言
這種東西只要隨便一個灌過十幾次Ubuntu Linux的工程氏都麻多少有些概念
又不像是真正在做RTOS的
Nuclears系統有碰過嗎?
這種連file system都沒有的東西
我就看有幾個人玩得起





作者: fightxp    時間: 2015-12-2 10:18 PM

簡單的說,薪水跟工時內容不成正比啊!

作者: lp.tsai    時間: 2015-12-3 01:46 AM

chevylin0802 發表於 2015-12-2 03:12 PM
我是認為你搞錯了問題的方向

在以前Internet還沒發達之前的年代

看來來自不同學習經驗與領域看法的確是不同,想必chevylin0802在業界的軟體開發經歷一定也很豐富。
作者: Jeepluo    時間: 2015-12-5 07:18 AM

學什麼語言都有他的價值存在,主要是看你怎麼用,例如大家都說這東西應該用VB寫,但你卻是用僅會的C去把它寫了出來,雖程序煩雜了一點,但也是達到了需求。
老闆的要求通常要你快準的寫程式,產出有用的價值,至於用什麼語言寫都是為了配合主機或前一個人寫的程式語言而制定的多。
作者: superjoeliao    時間: 2015-12-29 09:17 PM

現在的台灣的大學已經不注重建立基礎觀念了(蓮計算機的五大單元是什麼都不知道)
因此要學生從事偏底層的工作是十分困難的,所以斷層的問題是在所難免

作者: chevylin0802    時間: 2015-12-30 12:13 AM

本帖最後由 chevylin0802 於 2015-12-30 12:27 AM 編輯
superjoeliao 發表於 2015-12-29 09:17 PM
現在的台灣的大學已經不注重建立基礎觀念了(蓮計算機的五大單元是什麼都不知道)
因此要學生從事偏底層的 ...


其實應該說是重點偏移的關係
像資料結構
就從來沒有被拿掉
計算機概論也一樣不會拿掉
甚至離散數學也還在
只是像一些硬體相關的課程
可能就沒再繼續了
也有些資訊科學系已經不再上電子學
或著簡化學分
當然就會有差
甚至有的系已經把邏輯學變成選修或不教
當然就少了很多
一堆人不懂卡諾圖
不知道邏輯轉換
當然還聽到過有資工系出身的人沒學過邏輯電路
連各種正反器都沒學過
甚至也不知道什麼是TTL
不只資工沒在學
就連電子相關科系搞不好也不懂時序圖
不過這未必要緊
畢竟多數的人一踏社會工作
就必需重頭學過
只是
有些的東西是上司不會教的
比如系統分析
系統設計
如何讓程式的架構建立出來
這可不是你會哪一種程式語言就能學得會的事
學校與社會之間有著很大的斷層
不會有人能夠有時間去教會畢業生
因為工作就是有時間壓力的
加上十間公司有九間公司
非常喜歡動不動就開會
RD上班時間
佔了至少六個小時的開會時間
當然只能靠加班做研發
所有公司只要是講到開會
十之八九都是會而不議
議而不決
一次又一次不斷的浪費時間
RD也只好不斷的摸魚耗時間
這也就造成了現在最常見的問題

作者: kyo478    時間: 2016-1-9 02:51 AM

C語言與C++個人的經驗是都學起來,以備不時之需,雖然學習的過程是有點累,但是結果是相當的有收穫的!!
作者: smallsec    時間: 2016-1-15 06:02 PM

  1. 加上十間公司有九間公司
  2. 非常喜歡動不動就開會
  3. RD上班時間
  4. 佔了至少六個小時的開會時間
  5. 當然只能靠加班做研發
  6. 所有公司只要是講到開會
  7. 十之八九都是會而不議
  8. 議而不決
複製代碼
這說得太好了
道盡RD的心酸與無奈
作者: lovepage    時間: 2016-1-21 09:55 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chevylin0802    時間: 2016-1-22 04:19 PM

本帖最後由 chevylin0802 於 2016-1-22 04:25 PM 編輯
lovepage 發表於 2016-1-21 09:55 PM
梁朝偉 演的流氓醫生 講過一句話 " 手術非常成功,病人死了"
我相信資深工程師都有兩把刷子,我也相信RD都對 ...


所以HTC從股王變成現在這個樣子

在台灣
研發兩個字根本就玩假的
只有開發沒有研究才是真的
所以
就變成如你所說的狀況

系統整合一直都是台灣的公司最常見的玩法
至於什麼原子彈級的技術
那叫做見鬼去吧

也就因為是這樣子短視近利
所以玩沒幾年就越玩越走下坡

玩Embedded的
也都只會等toolkit
其實講得更扯的是
我真覺得許多人做那種工作就像是流水線上的工人一樣
講整合還真的是哪需要整
根本就是原廠來的時候長什麼樣子
出去就長的樣子都差不多
所以我才講那個真的連半點know how都沒有
不過就跟光華商場那些賣電腦的一樣
灌灌作業系統就可以了


作者: mn595959    時間: 2016-2-18 07:50 PM

chevylin0802 發表於 2016-1-22 04:19 PM

所以HTC從股王變成現在這個樣子

各位前輩好,
我是高職生,
所以對各位的工作狀況不是很了解,
我想了解的是,
所以現在單純寫應用程式,台灣已經不需要了?
Embedded System開發只有到國外才行?
資電類的學生在台灣還有以後可言嗎?
順便謝謝各位前輩,讓我了解現在台灣的狀況,
至於chevylin0802前輩說的,計概、數邏之類的,
高職倒是有教,但都是二三十年前的東西了
作者: chevylin0802    時間: 2016-2-18 08:54 PM

本帖最後由 chevylin0802 於 2016-2-18 09:34 PM 編輯
mn595959 發表於 2016-2-18 07:50 PM
各位前輩好,
我是高職生,
所以對各位的工作狀況不是很了解,

台灣的資電產業投入的以3C消費產品業最多
其次就是電腦伺服器端應用的部份

伺服器的技術都已經往虛擬伺服器應用方面發展了
許多做MIS的人員自己就會設定
講得更白一點MIS等同於要除了專精於安全管理之外
還得自己有能力架設伺服器以及架設虛擬伺服器跟應用
這些都沒有軟體行業的空間存在

而至於講到遊戲產業
台灣的PC線上遊戲90%以上都是跟國外遊戲廠商拿授權
養的工程師主要也都只是在負責做在地化的轉換而已
而一般來講那些在後台資料庫更改就可以
甚至於根本不需要工程師直接找一兩個翻譯就夠了

至於手機應用類的
那就真的是沒什麼搞頭
論Android App的開發
比不上中國大陸
論IOS App的開發
也照樣比不上中國大陸
而且根本用不著專職人員
中國大陸那麼多間大學
像這些案子隨便外包給這些大學生做就夠了
幾千塊人民幣就可以搞得定的事
何必還去請專職工程師
至於Windows10手機版的部份
市場小
所以連開發費用也少
何況現在也有許多直接採用WebApp的方式開發
直接只要一套就可以在三個版本通吃
說穿了
再過個幾年
恐怕台灣只要講到消費性電子產品的軟體研發
幾乎都會被中國學生取代

而許多學JAVA出來的也只能往Big Data往Hadoops方向去發展
IOS系統則力推Swift語言也一樣不是走C/C++
Windows則走C#

Embedded 系統在台灣的研發上
坦白講也並不怎麼看好
因為
台灣的企業往往都會走雙軌化發展
硬體的時程與軟體的開發時程是並行的
硬體的開發時程隨便你怎麼去算都差不多10個月內要搞定到PreMP
而且還要包括申請認證的時間
軟體也一樣需要從還沒有規格開始起算一直到完成QA測試也一樣是10個月
換句話說最多就是只有半年的時間讓你去開發測試
軟體PM才不管你RD有多辛苦
反正時程就是給你押在那邊
6個月你不吃不喝24小時去寫程式就是要把東西給他趕出來
那群PM比Sales還冷血還垃圾還更像Sales
但你就是沒得選擇
因為他們那堆專案都給你來一句
都是客戶要求的
專案無法完成他們負的責任就那麼一丁點
口氣好一點的PM就用低姿態求你做事
但事實上背地裡他們每個都是老大
所以你說呢?

很多RD到最後就只是去做做系統整合
把toolkits的東西修修改改
然後就交出去
至於系統穩定性問題
那不是他們要去考量的
反正到最後就是互相耍賴
踢皮球

狠一點的PM則是處處都在替客戶想
然後再回過頭來逼RD一定要幫他完成
事實上搞不好客戶都沒有那些要求

總之現在台灣玩C/C++的還不如去加入FSF
否則就是等著被PM給你挖坑坑死
他們那群人如果有點程式設計的底子
那還真的是更會坑RD
寫程式只有半桶水的實力
如果照每一項單項規格去估計的話
他們就是把每一項單項規格所需的開發時間給你用加法計算
十項功能要花多久就是一加一加一這樣一直給你加下去算時間
從來沒想過整合起來的時候會不會遇到相衝突的狀況
而事實上整合所需要花的額外時間成本反而更多
這堆事企業主真的了解嗎?

他們根本不懂
但是那堆PM就是懂得利用生意人的想法去灌殊那群企業主
還一味的強調他們對研發時間的管控很內行
所以一堆RD只好繼續拼到每天半夜
運氣好一點的話
也許你會遇到一個幫你擋開會的主管
運氣如果夠差的話
你每一天至少得空出4個小時去參加各式各樣大大小小的規格制定會議跟工作進度報告會議
然後你就得每天在那邊天天聽與會的其他人表演
而你可能只需要參與的時間不超過十分鐘
但你就得必須要聽那群人講三個多小時的廢話
開會的時間充份的擠壓掉你每一天真正寫程式的時間
於是
刷卡時間都過了半夜12點
HTC現在的狀況幾乎就是這種搞法
不只HTC
其實就連MTK也好不到哪去
更不用提到更血汗級的Infocus
而那群只要升上最高階的主管
就算是研發主管也同樣是Sales Man的個性
明明連他自己都知道需要花一年的
硬生生的就是命令下來只給你半年
如果你不肯拼
那當然就是直接拿大陸人來講給你聽
說人家大陸人只需要四個月就可以做好的東西
他給你半年已經比大陸人給的時間還長了
總而言之
言而總之
台灣的環境已經是RD殺手環境


作者: superwaterdog    時間: 2016-3-16 09:54 PM

經驗值也很重要
C&C++很會寫OK
但重點還是解決問題

這也是不可或缺的
作者: li8834    時間: 2016-3-17 08:37 PM

而許多學JAVA出來的也只能往Big Data往Hadoops方向去發展
IOS系統則力推Swift語言也一樣不是走C/C++
Windows則走C#


可是對於C/C++而言不也是還是很多人使用的語言嗎?
JAVA也有所謂的平行處理,不見得只有Big Data或Hadoops吧?

也有些資訊科學系已經不再上電子學


我覺得不能這麼說,資訊科學雖然跟資訊工程沒什麼兩樣
但是所學的東西還是有所差異
應該不是每個掛上"資訊"這兩個字的科系都要會硬體或軟體
也許是系所發展並不覺得這個科目是必備的,而讓學生自由選擇
作者: chevylin0802    時間: 2016-3-18 11:41 PM

本帖最後由 chevylin0802 於 2016-3-19 12:21 AM 編輯
li8834 發表於 2016-3-17 08:37 PM
可是對於C/C++而言不也是還是很多人使用的語言嗎?
JAVA也有所謂的平行處理,不見得只有Big Data或Hadoops ...

C/C++現在也都變成走向程式庫以及核心驅動程式之類的開發
並不是說人數多寡的問題
而是很現實的狀況就是
用C/C++花一個月才做得好的應用程式
可能用Python只需要花一個星期

程式語言再怎麼討論都一樣
各有各的優點
各有各的盲點

JAVA在2000年開始流行起來的時候
最主要的原因就是因為它需要靠虛擬機器來運作
也因為它必需要在虛擬機器下工作
所以它很自然而然的被當時的SUN吹噓成跨平台
但事實上任何一套需要靠interpreter執行的程式都麻一樣可以跨平台
JAVA跟C/C++的不同點其實是有
原本是擺在JAVA具備有同步與非同步執行緒的區別語法
(並非C++不能做, 而是POSIX Thread Library是到2000年以後才漸漸完備
而且程式設計師必需要靠比JAVA更複雜的實作才能完成相同的工作)
當然
最初始的時候
JAVA其實它是為了近似於現在的IOT的應用而特別製作出來的一種程式語言
最原始原本只是一個模擬環境為的只是要去發展出一種物件導向的CPU晶片
只是成本考量的問題
致使java編譯出來的jar檔一直都停留在虛擬機器碼的階段
而原先JAVA想要開發的CPU一直都沒有真正把它給做出來
隨著時代的進步與發展
直到近幾年才誕生出Arduino這樣的設計方式
更是大幅的簡化與易學易用
當然這主要的原因是因為Arduino本身只需要高職生就可以學的緣故

至於台灣的系所的問題其實真的只是在趕流行
像數位邏輯這樣的課程其實更是軟體工程師必學的課程
原因是所有的程式語言用最兇的語法大概要算邏輯判斷式了
而這種if .... else的架構
往往只會反映出最終的兩個結果true/false
如果說if裏面的條件式就只是很單純的一個
那也就算了
但往往都是有兩三個甚至更多的條件式混在一起做AND或OR
很不幸的就往往出現在這個環節上
許多程式設計師往往就是因為處理過程沒有仔細去分析每一種條件式會發生的情況
導致許多程式不斷的有BUG
這樣的問題並不會比C/C++去遇到記憶體配置的錯誤來得少
更遑論平行處理的時候變數數值改變所引發的錯誤問題
原因就是出在一般的程式設計師在寫程式的時候都過於直觀
但是如果是一個有學過數位邏輯甚至於電子學的人來講
尤其是電子學關於硬體介面的時序圖的分析
那麼它應用到軟體實作的過程當中勢必會更趨向於謹慎與注意各種例外的狀況問題
也因此可以避免許多不必要的錯誤發生
因為它是要靠思考訓練的養成去達成的
而這並不是在於你學了哪一種程式語言
畢竟
說得更不客氣一點
即使現在許多人不斷的在講物件導向
然而物件裏的函式內部的程式進行方式仍然必需要靠傳統結構式程式語言的寫法設計
也因此
即使Linux Kernel有99%以上都是用純C語言去寫的
照樣可以做得到相當程度的物件化設計
只因為它的設計思路仍然是物件化的思路
即使它所採用的程式語言本身不具備物件導向式的語法
同樣採取這種設計理念但仍然只用傳統的C的開源專案還相當多
比如ffmpeg, xine, nginx 以及以前的DirectFB

事實上只要你回頭去想想
你就會發現真的是很傻眼
windows 98 與 windows xp 與 windows 10
這三個作業系統當你仔細去比對灌完之後所佔據的硬碟容量
以及它所提供的功能
你就會發現到很不可思議的事情
從10幾MB到現在的20幾GB
佔掉的容量呈2000倍的成長
但是所提供的應用程式呢?
卻相差不多

然而如果你再去比較早期的Redhat Linux 與現在的CentOS
成長幅度卻不到10倍

總之
我只會認為現在的系統真的有病
越做越龐大
可是事實上垃圾也越來越多


作者: lee12768    時間: 2016-3-31 09:43 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: qqmain    時間: 2016-4-7 07:22 AM

smallsec 發表於 2016-1-15 06:02 PM
這說得太好了
道盡RD的心酸與無奈

完全正確啊,
台灣RD的心酸,
作者: superforsin    時間: 2016-4-11 04:41 PM

超認同二樓的說法,台灣人很多都坐著等COPY,有點自私,難怪軟體發展一蹶不振
作者: dv3668    時間: 2016-4-14 02:17 PM

現在的台灣的教育老師跟學生都不認真,競爭力變弱了,且要學生從事偏底層的工作是十分困難的.

作者: dv3668    時間: 2016-4-14 02:18 PM

現在的台灣的教育老師跟學生都不認真,競爭力變弱了,且要學生從事偏底層的工作是十分困難的.

作者: tevin    時間: 2016-4-20 09:03 PM

現在寫程式或學寫程式,已相對的方便,簡單很多了
有任何的疑問.GOOGLE大神都能幫忙.
雖然未必是百份之百
20年前剛畢業第一份工作.所用的是MFC 4.2
第一個疑問便是: main 呢??
也曾為了某一本書的某半頁的幾行字
而花了5,600元買下該本書
寫程式, 或者應該說所找到工作, 你要對他有興趣, 有熱忱
才會長久
作者: 13and22    時間: 2016-4-20 10:15 PM

看來程式這條路不好走阿!!
各位大大辛苦了
作者: hoare    時間: 2016-5-7 02:46 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: manora    時間: 2016-5-20 10:44 PM

在業界, C仍然是許多行業主流.
靠著只會 C語言而拿高薪的也很多.
特別是在晶片應用業界.
而且懂C之後, 要跨入其他語言相信不是難事
作者: qqmain    時間: 2016-5-21 07:41 PM

我寫過uCOSII 改scheduler, 在80186自己做TCPIP+BT 上網下載影片, freeRTOS 移植到新的平台, 搞到現在快沒工作, 你認為有甚麼價值,
作者: coal511464    時間: 2017-6-2 06:51 PM

我覺得是學好一種語言比較重要 你在學第二種會有基礎在 學很快
作者: o_g349    時間: 2017-9-14 12:32 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: coal511464    時間: 2017-9-15 10:23 PM

先學好C/C++還是有好處的吧 是少會對記憶體 指標觀念有認知 但是功力深不深又是另一回事了
很多人一時貪快底子沒打好 直接寫python 這類幫你包好好的一堆lib的語言 到頭來出去面試白板題考個linklist完全寫不出來 不過也不能怪他們 畢竟新手在處理字串 轉型上 就快搞死了
作者: Wesley28    時間: 2017-9-27 01:28 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: jackyo04    時間: 2018-6-21 09:06 AM

大學選修很重要阿,但一般選修的內容都會跟業界有很大的出入,教師問題很大,選修的課程又往往沒有連貫,導致有些學校的學生畢業出來會好幾種語言,然後沒有一種是專精的,這就是台灣大學爛的地方,更不用提研究所,而學生也不會去重視選修修完後下一個課程的選擇,幾乎都是哪邊有輕鬆好混的教師,就一窩蜂的跑過去選,然後就會出現資料結構的很大一個斷層,最後畢業出來,然後去公司上班,程式語言不學精就敢去公司闖,然後怪大學沒學好或公司沒有教育訓練之類的,其實這些都是自己的藉口,現在許多公司都沒有所謂的教育訓練了,而且在台灣幾乎不會有,都是直接真槍實彈了,你不會就找別人,不然就直接把開發部會寫程式的留到剩一個,然後,有新專案就發包出去,而留下來的那個只是負責維護跟修改參數而已,根本沒有所謂的更新,這就是台灣,如果未來想留在台灣寫程式,你必須想辦法自學,或者有系統式的學習,否則,你在學校裡一定會被環境所感染,然後開始怠惰..




歡迎光臨 伊莉討論區 (http://a11.eyny.com/) Powered by Discuz!