軟體工程本科生 方向很迷茫 一個嵌入式 一個軟體技術裡面寫的很詳細 誠懇認真的請教大牛?

我對計算機很感興趣,對c語言很喜歡, 迷茫到底是學習語言去軟體公司 還是嵌入式方向。 做程序員(類似碼農)的話 他們說是吃青春飯。特別累 辛苦 而且都是代碼重複。我經常在Csdn上瀏覽也發現這個現狀。大部分是轉管理。 要不然就被淘汰。競爭壓力很大, 有多少人又能轉管理。實話說就是我想活的久一點, 即便我做不成管理也能活得好些。 因為我聽他們說嵌入式是一個吃經驗得職業,經驗豐富 年級大一些也可以。 請問這又是嵌入式什麼方向。 Liunx軟體程序員 ? 我聲明我都挺喜歡得兩個方向, 我需要一個一個方向去努力,我喜歡計算機 我熱愛C語言。沒有偏袒哪個。

Ps: 個人現狀 我學校是普通二本, 競爭力不大,出去估計也就是碼農, 我準備考研提升自己,不過希望能有一個方向在準備研究生的空閑,專研它。學習它


相信我,真正熱愛這個工作的人不會吃青春飯的。IT行業比其他傳統行業最大特點就是更新很快,你身在其中必須要不斷學習,這樣才能保持競爭力。比如我從業10+年,從Delphi, VC++一直到.Net到Ruby on Rails,到Android, 到IOS, 今年因為項目需要,我又把PHP學了,接下來我對Go也很有興趣。。。。而我目前的正式title是android framework engineer 兼PM。

很多人為什麼轉管理?因為跟不上技術的腳步了,為什麼跟不上,很多是因為他不喜歡,不學習。

所以要不要入這行,要考慮只是「是否熱愛」,其他都不是你應該擔心的。

希望能對你有所幫助。


嵌入式開發是一個很大範圍的概念,涵蓋的知識面比較零散又比較專業,軟體開發、硬體原理都需要了解。先從軟體開發方面講:軟體開發主打語言是:C/C++,最常用的還是C,因為嵌入式軟體的大部分工作都是在控制硬體和硬體打交道,而這個是C語言擅長的。從整個軟體邏輯上來講主要都是流程式控制制,這個也是C語言擅長的。C++可以作為補充,完成一些複雜的數據結構和演算法以及部分對圖形界面的需求。而具體的軟體開發,根據項目的需要和複雜度要求,可按照有沒OS劃分為兩類:

1、沒有OS直接在硬體上跑嵌入式軟體通常稱為「裸奔」,這類嵌入式軟體基本用來完成一些邏輯比較簡單的任務,例如:鍵盤按鍵讀取,控制LCD顯示等,通常是作為大系統中的一個子系統或組件存在的。這些軟體的運行平台通常是一個8位或16位單片機,如:大名鼎鼎的8051系列,最近幾年隨著ARM 32位單片機的普及,也有不少Cortex-M系列的32位單片機加入。

2、在硬體上運行一個OS,然後在OS的基礎上開發嵌入式軟體,這類系統就比較龐大了,完成的功能也比較複雜。常見的嵌入式系統有:開源的嵌入式Linux,被Intel收購的VxWorks、微軟的WinCE,以及我們常見的手機OS基本都可以稱之為是嵌入式系統。這類嵌入式系統開發需要有一個軟體開發平台搭建的工作,主要完成嵌入式系統的移植,也就是讓以上所講的嵌入式系統能夠在自己開發的特定硬體平台上運行起來,以嵌入式Linux為例:這個過程包括:Bootloader移植,文件系統製作,內核的裁剪等。等軟體平台搭建好了,也就是嵌入式Linux可以運行起來,可以看到shell命令行了,這個工作告一段落。然後就是具體的嵌入式軟體開發了,這個又有驅動程序和應用程序之分:驅動程序是做為Linux內核的模塊在內核態運行的,為上層的應用程序提供控制硬體的作用。應用程序就是具體的控制邏輯了,涉及的東西跟這個嵌入式系統的具體工作任務相關。不過和通常的Linux編程區別不大,要熟悉了解Linux的系統API就可以了。需要注意的是,嵌入式系統中軟體的資源受限,需要對軟體完成足夠的優化,因為通常的嵌入式系統資源比較緊張,另外嵌入式系統工作的環境也比較惡劣,可能隨時斷電,連續運行幾個月不關機等都是常有的事,需要你對軟體的穩定性有足夠的把握。

硬體方面:一個嵌入式系統通常是由:ARM + DSP/FPGA + 若干個單片機組成的。ARM作為系統系統中主控上面運行嵌入式系統,DSP或FPGA完成一些重複的數據運算或控制邏輯,單片機完成對一些小系統的控制,最終由ARM上運行的嵌入式軟體把這些串聯起來形成一個複雜的控制系統。軟體開發需要對使用的SOC有一定的了解,知道片上的資源如何,以及具體的硬體設計的時候,使用了那些硬體完成那些功能,這個需要和硬體工程師協作完成。

從本質上來講,嵌入式軟體開發和普通的軟體開發有著很多本質上的不同的:

首先,嵌入式軟體開發的代碼量小許多,整個項目的代碼量可能不及PC上一個軟體的子模塊的代碼量。其次,嵌入式軟體開發周期和更新迭代周期比較長,因為一個項目從構想到硬體設計、軟體設計、軟硬體聯調、測試發布是非常緩慢的,通常嵌入式系統都是針對特定場合的需要而設計的,這些東西的更新變動非常小,不需要經常地軟體更新,相對比較輕鬆。

最後,根據你的情況,喜歡C語言,有對Linux有所了。解建議可以了解下嵌入式Linux開發,這個行業還算比較輕鬆,也比較有趣,但是對經驗要求比較高,當然也很看重經驗。


受邀。

已經許多年沒有做嵌入式方面的開發了,嵌入式領域應該有比較大的變化,所以我不適合作嵌入式方向的分析。不過現在邊做產品設計還做軟體開發,所以對軟體開發方向談點看法。

軟體開發到底能不能成為終身的職業?在美國肯定是可以的,在國內如果認識清楚了我想也應該可以的。

影響軟體開發能否成為終身職業的主要因素我想應該是兩個:1.程序員是否越老越值錢,價值越大;2.軟體開發是否是拼體力的工作。

以上第1個問題的答案是肯定的,第2個問題的答案是否定的。

程序員從業時間越長,經驗肯定越豐富,相應的薪酬應該更高。只不過國內十幾年經驗的程序員不是很多,所以不太能夠得到參考信息。為什麼國內十幾年經驗程序員比較少,我想跟國內程序開發不規範有關,也就是軟體開發不夠工程化。

10年前看到過這樣一個故事,當時印度是僅次於美國的軟體大國,大致的內容是:一個美國公司招聘人員讓一個中國程序員和一個印度程序員開發同樣功能的一個軟體,因為中國程序員演算法方面訓練的比較多,所以比印度程序員快1/3時間就把軟體開發好。接著招聘人員讓這兩個程序員把他們開發的軟體里的一個功能修改一下,兩個程序員用時差不多。之後招聘人員又讓他們在之前的軟體基礎上增加一個功能,印度程序員由於其之前軟體良好的框架,很快把新功能開發好,而中國程序員開發軟體不注重規範,所以軟體可擴展性很差,最後不得不重新把軟體推倒重寫。當時這個故事的作者是為了表述印度it業如此發達得益於其良好的計算機教育,尤其軟體工程化方面的教育。

國內計算機專業在軟體工程方面教育是缺乏的,即使是軟體工程專業,教育也不到位,許多老師自身沒有工程經驗。所以國內程序員開發的軟體可重用性、可擴展性差,有時不得不做推倒重寫軟體代碼的事。開發效果低,導致加班頻繁、項目延期。

如果真正掌握軟體設計方法,如面向對象分析與設計、設計模式等,那開發出來的軟體是優雅的,一個軟體就是一個藝術化作品,結構清晰、代碼可重用性高,隨著軟體開發時間的推移,積累了很多可復用的固件,開發一個新的軟體速度就非常快,這還需要跟年青人去拼體力嗎。如果真正掌握軟體過程方法,如敏捷開發方法,軟體開發過程能適應變化,項目變得可控的、可度量,開發高效,就不需要加班了,敏捷開發也不提倡加班的做開發。

寫了這麼多,希望對你重新思考你的專業方向有用。


我的愛好就是寫代碼,讓我參與管理可以,讓我放棄編寫代碼我做不到。

想想自己喜歡到底的是什麼?你願意為這件事情放棄些什麼,又能付出些什麼?

嵌入式,工控晶元設計,通訊行業,各種軟體公司 有差別嗎? 如果你自己技術糟糕,平時又不願意鑽研,就算你是重點大學乃至碩士博士,你出去也競爭力不大,不會寫工程代碼的碩博一抓一大把。

說到語言,拋開細微的語法差異,只要數據結構和演算法學的好就可以了,每一個語言都有自己適用的方向,也都有技術大牛,也都有半途而廢的,這個依然看自己是否努力,是否願意不停的學習。

至於碼農,一半是程序猿的自嘲,一半是對一些不願意努力付出的其他程序員的嘲諷。請不要把這個詞語想的太壞,我是碼農我自豪,我是IT民工我驕傲.


謝邀。

如果你真的熱愛編程,熱愛和計算機打交道,熱愛創作優雅的程序,我想你更應該把程序員的工作當作終身的事業而不是簡單的養活自己的手段。

我覺得,你的迷茫或許不是因為這份職業的優劣(實際上職業哪來的優劣,收入只是衡量標準之一),而是因為不知道自己想要的是什麼樣的生活,不知道適合自己的是何種生活狀態。這很正常,即將走出校門的時候,我也在所謂舒適穩定的國企(事實證明並不像平常人想像的那樣舒適)和競爭壓力大的計算機行業徘徊,最後我選了國企,一年之後,我果斷離開編製,選擇了一份自己喜愛的工作,程序員。總之,選擇的時候,謹記,無論選擇什麼,你都必須放棄一些所謂的優勢,完整的人生必定不完美,反之亦然。

另外,你說自己喜愛C,喜愛Linux,喜愛嵌入式,這很好,如果你能試著了解C++,Python,試著了解BSD,試著了解GUI就更好了。

希望這些話對你有幫助。


我讀的是嵌入式的方向,但是我現在發現,在中國,讀嵌入式是沒什麼前途的,我們班90來人,沒有一個人以後要搞嵌入式的。有關青春飯這個問題,如果你做的不是底層的開發,你就是在吃青春飯,因為你和年輕的程序員能力一樣。舉個例子,python是用c寫的,你應該當寫python這種程序員,而不是用python的程序員。


嵌入式分硬體和軟體, 按照樓主的情況,建議先從軟開始:

軟體需要重點學習這幾個方面, 推塔往下優先順序降低

A塔:

1. C語言會好(不算數據機構中的鏈表和樹),推薦CPP

2. &<&>:

先必須會linux下的命令, 另外這本書的內容豐富, 可以作為「中文字典」使用, 全部內容掌握不切實際, 重點掌握命令, 系統調用(無IO), 帶buff IO(c裡面的文件指針), 進程選讀(後期工作後可以再精讀), 線程必須掌握(含線程屬性), 進程環境必須研讀(特別是虛擬地址空間中的堆棧與c語言中的各種變數關係);

選讀部分有socket編程,進程間通信。如果對socket感興趣, 對以後的路由器相關嵌入式工作有意向, 就好好看看unix網路編程和TCP/IP第一,二卷;

B塔; 工作1.5年後可學,如果有精修演算法之類的, 可以提早

《數據結構》(不含演算法),重點掌握各種鏈表,圖,樹;

《深入理解計算機原理》

上面學好需要點時間的, 差不多2年。


2010年碩士畢業時我們班12個人,目前無一還奮鬥在嵌入式領域。要麼去做應用,要麼做項目經理,產品經理,最最相關的也是做硬體驅動開發。的確是個青春飯。如果按錢途來看的話,目前搞移動端應用和互聯網+是最熱門的。


推薦閱讀:

知乎里的編程大神的 GitHub 地址都是什麼?
你會出於什麼原因在Github上star一個項目?
如何讓學習編程成為一種快樂,有趣,優雅的事?
如果不是為了生活,你還會選擇編程么?
我是一個程序員,工作一年了。現在工作一般,想下班後充充電多學點東西。然而事實卻相反,怎麼讓自己的學習更加有毅力?

TAG:程序員 | 職業發展 | 大學生 | C編程語言 | 嵌入式系統 |