學習硬體對android編程有多大的幫助?
本人大一,學電子信息科學與技術,想知道如果以後轉Android編程,在硬體方面的學習對編程有多大幫助?
基本沒有硬體和安卓開發之間墊著一層API一層Java虛擬機一層Linux,都給你隱藏起來了
請問題主,作為一個電子專業的學生,你以後是想面向晶元編程,還是面向伺服器(互聯網)編程?我先把你這個「編程」說清楚,再談其他。
一般來說,電子系學生都是在晶元上的編程,計算機系的一般都是面向互聯網編程。計算機系可以轉到晶元編程,電子系學生要面向互聯網編程,需要補充很多的編程知識![1]
如果題主你要出國,可能就會遇到虞己某所說的故事,注意前提條件是「出國」。
所以在目前的答案中,我除了贊同虞己某的答案,也贊同了諾記的答案。EE和CS是兩個完全不同的專業,它們之所以總是被人們比較,是因為EE和CS都要學編程。
一
EE學彙編,大多是學習51單片機的彙編語言,學完後在51單片機上戰鬥;CS學彙編,學校可能教51的彙編,後面可以轉到X86的彙編(EE學生對X86一臉茫然狀);二
EE學C語言,在VC++ 6.0做完作業後,轉戰keil或者IAR開發環境——面向晶元編程。
CS學完C語言,轉戰Linux編程或者Java編程或者HTML5+CSS+JS——面向互聯網編程。三
EE的面向晶元編程的板級設計,屬於製造業——電路圖、PCB圖有可能還未完成,硬體設計和單片機編程並行開發,而且可能還是編寫不跑系統的裸機程序。CS的編程,不需要考慮電路圖、PCB圖——他們絕大部分都是在某一個操作系統上面編程——不是Linux就是Windows要不然蘋果系統,操作系統會提供一系列的API給軟體工程師使用,這在只會用裸機開發環境的單片機工程師是想像不出來的。
面向互聯網的編程,在業務上資料庫是底層,以互聯網通信技術為載體,開發伺服器端和客戶端,其中一種常見的軟體設計架構是MVC模式。MVC,全稱是 Model View Controller,是模型 (model)-視圖 (view)-控制器 (controller) 的縮寫。它表示的是一種常見的客戶端軟體開發框架。
開發這種C/S(客戶端/服務端),或者B/S(瀏覽器/伺服器)架構的軟體,根本不需要學什麼硬體知識!!!
四學計算機的人,所說的硬體只是指「計算機組成原理」(微機原理),而學電子的人都知道,「微機原理」只是硬體其中的一部分,硬體還會涉及到電源、運算放大器、阻抗匹配、功耗測量、濾波計算等等。2015年全國大學生電子設計競賽題目
【本科組】雙向DC-DC變換器(A題)風力擺控制系統(B題)多旋翼自主飛行器(C題)增益可控射頻放大器(D題)80MHz-100MHz頻譜分析儀(E題)數字頻率計(F題)短距視頻信號無線通信網路(G題)
上面是「2015年全國大學生電子設計競賽題目」,只有一部分題目(B、C、G)對單片機編程有很高的要求。
題目A屬於電源類,B、C是控制系統領域,D信號類,E、F為儀錶類,G歸為通訊類。
五
單片機編程有一個很重要的能力,那就是要會看晶元數據手冊(datasheet),會看datasheet已經足夠應付很多工作了。相對的,C/S、B/S的互聯網編程也要看手冊,只不過這些程序員稱之為文檔。伺服器開發工程師在伺服器上開發好了後台系統,會提供介面給前端程序員使用,同時留下文檔說明這個系統的介面。前端程序員根據後台提供的介面,以及美工製作的頁面,就可以做出各種精美的應用程序。
(網頁、手機APP都可以視為前端)六
以國內目前的情況,面向互聯網編程的程序員是最好找工作的,面向晶元編程的工程師的崗位需求要低一個檔次。=====================以上答案發布後同一天更新下面========================
題主更新了,這裡答案也跟著更新。
這裡可以拋出答案了:Android APP開發完全不需要任何電子硬體知識。
然後隨便給出一個資料鏈接:我想自學安卓編程,那麼我需要按哪些順序學習哪些課程呢? - bird-HU 的回答
學習大體步驟:
一,java基礎二,安卓基礎三,學會做程序,以學代練。
Android APP開發,以後工作中使用的技術會分三種,有最常見的Android原生(Native)APP開發,Web APP開發(可以同時開發Android和iOS端),或者很少見的Hybrid App。以後工作只是使用這三種里某一類技術即可。
我覺得吧,有的安卓開發工程師,可能連自己的安卓手機用什麼晶元都不知道(雖然大都是ARM),他們關注更多的是安卓的版本,開發環境,後台介面,程序架構以及各種API介面。
Android開發涉及到的硬體知識,最多是如何調用攝像頭,如何拍照、錄像,GPS定位,播放語音和錄音等等。這些東西底層都已經封裝好,開發者們只需要調用相應的API就可以了。
另外除了學習Android技術,更多的是需要知道互聯網相關技術。比如請求、響應、域名、URL、類的思想、MVC等。
====================================================================
注釋 [1]
第二段原文是:「計算機系可以轉到晶元編程,電子系學生要面向互聯網編程,很難!」
這裡有人提出不同意見,觀點表述方式我已經修改,然後詳細解釋一下:
1、這裡專指剛出來的畢業生,按部就班跟著學校開設的課程學習。
2、計算機系課程裡面有學《計算機組成原理》,而且他們的編程能力比電子系的更上一層樓,所以計算機系畢業生以後從事嵌入式軟體開發、晶元開發是沒問題的。但是,讓他們設計電路,學習如何使用萬用表、示波器、直流電源、信號發生器這些設備,就需要重新學習了;
3、同樣的,電子系學生,要面向互聯網編程也需要自學,電子系的老師不會告訴學生什麼是伺服器,什麼是HTTP,帳號登錄是怎麼個原理,帳號密碼要怎麼存儲,XML和JSON又是什麼東東,還有怎麼設置cookie自動登錄?電子系學生只會在單片機開發環境上面寫C語言,不會使用Eclipse,也不知道怎麼安裝Java EE環境,Linux可能會一點,但素不知Linux原本是用來做伺服器系統而不是在嵌入式上運行。沒有人領入門,都還是要自學!自學!自學!
====================================================================
get不到我意思的看官們,跟我一起吶喊「EE轉CS大法好!CS萬歲」就行了~我們幹嘛要爭辯是EE轉CS難還是CS轉EE難啊?自學能力強的人,能在EE和CS之間自由穿梭,按部就班學習EE課程或者CS課程的人…嗯?今晚月亮不錯哈~
PS:轉CS的人還在看著教程學習時,CS的人似乎都會代碼優化了...
====================================================================
太多人誤解我中心思想了,這裡再次強調:我從來就沒有比較是CS轉EE難還是EE轉CS難!我表達的意思是:「CS可以去互聯網行業,也可以去做晶元軟體開發,CS做晶元開發就是轉EE了嗎?庸俗!幼稚!可笑至極!程序員可以野生,電子工程師不可能野生!我強烈贊同CS轉EE是比登天還難的事情的觀點!!!EE也有編程,可是對互聯網來說,那些EE的編程知識不通用!要去互聯網軟體行業還需要學習更多的編程知識!」
程序猿可以野生,電子攻城獅不可能野生!!!
程序猿可以野生,電子攻城獅不可能野生!!!程序猿可以野生,電子攻城獅不可能野生!!!野生不野生怎麼了?程序猿工資高啊~
====================================================================擴展鏈接:1、嵌入式領域的職業發展方向是什麼? - 嵌入式系統2、Web 建站技術中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什麼? - 張秋怡的回答如果未來從事比較底層的編程,例如單片機、嵌入式系統、操作系統等,硬體知識是很有用的。
如果從事其他方面,則用處不大。
你看到的將不是程序代碼,而是電子在電路間歡快有序的流動。
你會感覺API就是內存上的一團電子簇而已,操作系統就是硬體上一團看似雜糅而又緊密聯繫的電子簇。你將理解一切數據結構不過是編譯器搞得鬼,原來每一個電子在電路上都那麼的自由,原來硬體不會限制任何結構。
你會覺得你寫的單核多線程程序根本不是在並行運行,而是內存上兩個不同區域的的電子在交替流入CPU。
你不會覺得存儲器中的數據排列是線性整齊的,你感覺存儲數據的電子總是在MMU,內存和磁碟三者間流動,你覺得凌亂而有序。你覺得虛擬存儲機制在你看來並不讓是每一個進程看到了相同的存儲空間,而是不過龐大電子間有序的合作和謙讓而已。
患有死強迫症的你後來會發現智商不太夠用了,你覺得層層抽象之後,電子的世界變得太凌亂了,你覺得你的大腦不太能分的清電子的運行規律,你覺得一團電子本來能從A地直接到B地,但卻總經過了其餘無數個電子團的傳遞,每個電子團還只是邏輯上的團,在空間中還無比分散。 你只好默默接受了抽象這個神一般的概念,接受了面向對象編程。你也決定從軟體機制上去理解虛擬機,而不是死磕硬體。
程序運行起來那一刻,你會很興奮,你放佛看到了電子的光影。你會愛上註冊機音樂,你會覺得這種魔性的音樂是如此真實地描述了程序的真諦。絕對沒有什麼知識是沒用的,當你認為某個知識沒有用而不去學它的時候,你是放鬆了對自己的要求,你從它身上節約出來的時間絕對不會投入到其他學習力,而只會荒廢在dota上面。要在編程的道路上做精做深,了解微機原理和操作系統原理是非常重要的,而操作系統原理又與硬體密切相關。如果從事底層網路相關的開發,那麼了解硬體網路設備的工作原理也是很有必要的。當然,如果你滿足於6000元包吃住的薪酬待遇水平,滿足於用現成框架實現別人實現過一萬遍的業務,滿足於35歲除了資歷以外一無所有的職業生涯,你可以什麼都不學。
謝邀。
如果已經有很多編程經驗,知道自己的長處和短板,那學什麼東西都有可以對編程有幫助的部分,更可以有意識的去補自己的短板。
但是你現在沒經驗,將來轉編程,我覺得這個投資是比較盲目的,不如直接學編程。編程不過是一項技術而已,但別忘了技術的核心是思想。所以我經常告訴一些程序員,不要為了學技術而學技術,而應該學習它的思想。因為有許多人學了卻不明
白,也沒有悟性,他不過就是一個普通的工人。一個有悟性的人,無論他學什麼,他都能把所學的思想運用得恰到好處,並加以改善或提高,甚至運用在各種領域。
謝邀不管學什麼,要學的是原理(推導過程、計算方法、思考路徑),然後記基礎設定,總之不能用背政治的方法。只要不是專門學編程,那麼學的科目的具體知識在編程上可能都沒有實際用處,只能看這些科目的思想的影響。所以可以拋棄具體知識內容。電子類專業在編程隔壁,比其他專業好一些(不過應該跟計算機專業里的硬體方向還是不一樣的吧)。比如數電,領會與或非、0和1的思想,忘掉「門」的概念、高電平低電平吧;電路,領會模塊設計封裝、連接關係,忘掉電壓電流電阻吧
沒有幫助。不如把時間都用在軟體上,盡快轉過去。
如果做apk開發,是沒有多大用處的。
這個問題我覺得要分情況看,如果你要做底層開發的話,最好還是學習一點。至於做個app,顯然這個是沒有必要的了。
電信專業大三狗怒答,安卓APP在運行時有硬體 - Linux Kernel - Java虛擬機 - Android API三層虛擬機器,如果不去寫底層,本專業在電子/計算機方面的知識其實不會給我們一個更高的起點。
電子信息工程大三狗表示沒什麼幫助。 本專業學的硬體知識跟安卓開發壓根就沒什麼關係。剛開始學習安卓開發是不需要接觸硬體實現的,如果有一天你能接觸到了,你本科學的肯定也忘了。 真的想學要趁早,別像我一樣。
絕對的沒幫助。
如果你說的硬體特指計算機組成原理的話我建議你學,如果學硬體還要學上模電那對於你走軟體的道路沒什麼幫助
學習硬體的設計方法和工作原理,對編程是有很大好處的。可以讓你更深刻的理解整個系統是怎麼工作的,進而更合理的使用軟體編程方法,使系統的功能得到充分的應用。在懂硬體的基礎上,進行軟體編程,會讓你對這個世界有更多的認識和體悟,這就不是簡單的設計一款產品的意義了。
電路對編程沒啥用,數電會基本的就好
?+:;;;;:+?+:;;;;:+?+:;;;;:+?+:;;;;:+?+:;;;;:+?+:;;;;:+怎麼又改安卓了……嗯嗯……安卓也有跑嵌入式設備的……嗯嗯……你懂以後編寫App時看見多線程、定時器、中斷,腦袋裡馬上能閃過底層實現方式,不會覺得是在黑匣子上面編程,總的來說多了些掌控感,但對應用編程的影響還是偏少些。
推薦閱讀:
※android圖片圓角怎麼簡單高效實現?
※如何做一個有高性能混合開發iOS/Android應用?
※BiliBili客戶端中瀑布流的圖片是怎麼做到寬度固定,根據圖片比例來設置長度呢?
※Android應用開發大神用過這個網站嗎?該怎樣學習和使用?
※Android 開發中有什麼經典的輪子值得自己去實現一遍?