03.07 工程師、程序員、碼農有什麼區別?

項目經理笑哈哈


作為一名從業多年的IT人,我來說說我對這幾個概念的理解。

工程師是一個比較寬泛的稱呼,比如軟件工程師、硬件工程師、網絡工程師、前端工程師等等,往往工程師崗位的工作內容更偏向於實施。比如我們研究所裡有研究員職稱體系,也有工程師職稱體系,一般從事實施任務的技術人員走的都是工程師職稱體系。工程師體系以項目實施情況作為重要考核標準,而研究體系則更多的看研究成果的技術含量、論文質量等等內容。

程序員則是對專注於程序設計工作崗位的一種稱呼,程序員的崗位細分也非常多,有後端程序員、前端程序員、嵌入式程序員、移動端程序員(Android、iOS)等。程序員通常分為應用級程序員和研發級程序員,應用級程序員主要的工作內容是做業務功能實現,而研發級程序員往往解決的是系統級問題。簡單的說,應用級程序員往往是調用研發級程序員的功能模塊來解決業務問題。科技公司中應用級程序員的數量通常大於研發級程序員,尤其是大型軟件企業。

碼農是很多程序員對自己的一個“戲稱”,早期國內很多大型軟件公司的主要業務以外包為主,這種開發整體上來說技術含量比較低,大量的工作就是複製粘貼,而且加班情況非常普遍,因此很多從事此類工作的程序員戲稱自己為“複製粘貼員”、“搬運工”或者“碼農”等。目前隨著我國IT領域的結構化升級,“碼農”會逐漸消失。

簡單的總結一下,工程口的技術人員多稱為工程師,研發口的技術人員多稱為程序員,技術含量低、工作量大的應用級程序員稱自己為“碼農”。

我的研發方向是大數據和人工智能,我會陸續在頭條上分享一些互聯網的科普知識,感興趣的朋友可以關注我的頭條號,相信一定會有所收穫。

如果有IT領域的問題,也可以諮詢我。

謝謝!


IT人劉俊明


你這裡指的工程師應該是軟件軟件開發工程師

軟件開發工程師、程序員、碼農光從字面上來講就不難看出,軟件開發工程師的社會地位普遍比較高,要有一定的資質證書,一定學歷,開發出軟件,而程序員更多的是重複寫程序,沒有開發的性質存在,碼農往往是程很多序員對自己的自嘲稱呼

1、軟件工程師Software Engineer會把軟件作為一種工藝持續不斷提高,他不是簡單將東西硬拼在一起,他從工程角度構建軟件,並不是說其他人有點魯莽,但是軟件工程師共同點是講究巧妙,而不是直接率性。

2、程序員Programmer能編寫令人驚奇的代碼,使得它清楚、分解良好和很少出錯,這些都是他關心的方面,他們能寫好代碼,並且掌握算法天的工作內容,國內的程序員很多時候就是把別人已有的東西按照自己的——甚至不是自己的——需求裝配一下,沒有什麼創造性,

3、碼農主要指的做一些重複性工作,碼農編寫的代碼不太優美,也沒有良好的松耦合分解,但是代碼能夠運作正常工作。


恩酷科技


一、如何定義架構師

Java架構師,首先要是一個Java程序員,熟練使用各種框架,並知道它們實現的原理。jvm虛擬機原理、調優,懂得jvm能讓你寫出性能更好的代碼;池技術,什麼對象池,怎麼解決併發量、連接池,線程池。

Java反射技術,寫框架必備的技術,但是有嚴重的性能問題,替代方案Java字節碼技術;nio,沒什麼好說的,值得注意的是”直接內存”的特點,使用場景;java多線程同步異步;java各種集合對象的實現原理,瞭解這些可以讓你在解決問題時選擇合適的數據結構,高效的解決問題,比如hashmap的實現原理,好多五年以上經驗的人都弄不清楚,還有為什擴容時有性能問題?不弄清楚這些原理,就寫不出高效的代碼,還會認為自己做的很對;總之一句話越基礎的東西越重要,很多人認為自己會用它們寫代碼了,其實僅僅是知道如何調用api而已,離會用還差的遠。

熟練使用各種數據結構和算法,數組、哈希、鏈表、排序樹…,一句話要麼是時間換空間要麼是空間換時間,這裡展開可以說一大堆,需要有一定的應用經驗,用於解決各種性能或業務上的問題。

二、技術歸納

熟練使用linux操作系統,必備,沒什麼好說的 。

熟悉tcp協議,創建連接三次握手和斷開連接四次握手的整個過程,不瞭解的話,無法對高併發網絡應用做優化; 熟悉http協議,尤其是http頭,我發現好多工作五年以上的都弄不清session和cookie的生命週期以及它們之間的關聯。

系統集群、負載均衡、反向代理、動靜分離,網站靜態化 。

分佈式存儲系統nfs,fastdfs,tfs,Hadoop瞭解他們的優缺點,適用場景 。

分佈式緩存技術memcached,redis,提高系統性能必備,一句話,把硬盤上的內容放到內存裡來提速,順便提個算法一致性hash 。

工具nginx必備技能超級好用,高性能,基本不會掛掉的服務器,功能多多,解決各種問題。

數據庫的設計能力,mysql必備,最基礎的數據庫工具,免費好用,對它基本的參數優化,慢查詢日誌分析,主從複製的配置,至少要成為半個mysql dba。其他nosql數據庫如mongodb。

還有隊列中間件。如消息推送,可以先把消息寫入數據庫,推送放隊列服務器上,由推送服務器去隊列獲取處理,這樣就可以將消息放數據庫和隊列裡後直接給用戶反饋,推送過程則由推送服務器和隊列服務器完成,好處異步處理、緩解服務器壓力,解藕系統。

三、面試方面

企業應用的系統架構師應該關注的幾個方面 (具體情況具體分析,以下未必準確,只是參考)

先來一些基礎面試題,您答得出麼?

1、說說JVM原理?內存洩露與溢出區別,何時產生內存洩露?

2、用java怎麼實現有每天有1億條記錄的DB存儲?mysql上億記錄數據量的數據庫如何設計?

3、mysql支持事務嗎?DB存儲引擎有哪些?

4、mvc原理,mvc模式的優缺點,如果讓你設計你會怎麼改造MVC?

5、hibernate支持集群嗎?如何實現集群?

6、tomcat 最多支持併發多少用戶?

7、map原理,它是如何快速查找key的?map與set區別?

8、描術算法,如何有效合併兩個文件:一個是1億條的用戶基本信息,另一個是用戶每天看電影連續劇等的記錄,5000萬條。內存只有1G???

9、在1億條用戶記錄裡,如何快速查詢統計出看了5個電影以上的用戶? ----可以參考 位圖索引的原理

10、Spring如何實現IOC與AOP的,說出實現原理?

以上純粹是常用的技術,還有很多自己慢慢去摸索吧;因為要知道的東西很多,所以要成為一名合格的架構師,必須要有強大的自學能力,沒有人會手把手的教給你所有的東西。

想成為架構師不是懂了一大堆技術就可以了,這些是解決問題的基礎、是工具,不懂這些怎麼去提解決方案呢?這是成為架構師的必要條件。

架構師要針對業務特點、系統的性能要求提出能解決問題成本最低的設計方案才合格,人家一個幾百人用戶的系統,訪問量不大,數據量小,你給人家上集群、上分佈式存儲、上高端服務器,為了架構而架構,這是最扯淡的,架構師的作用就是第一滿足業務需求,第二最低的硬件網絡成本和技術維護成本。

架構師還要根據業務發展階段,提前預見發展到下一個階段系統架構的解決方案,並且設計當前架構時將架構的升級擴展考慮進去,做到易於升級;否則等系統瓶頸來了,出問題了再去出方案,或現有架構無法擴展直接扔掉重做,或擴展麻煩問題一大堆,這會對企業造成損失。

在此跟大家分享一份工作2-5年的Java程序員學習路線圖:

關注我:私信回覆“架構資料”獲取往期Java高級架構資料、源碼、筆記、視頻

Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術

總結:其實架構師定義是模稜兩可的,有些7、8年開發人員也算不上架構師,架構師一般是在某領域超乎常人的理解,在公司遇到技術方面難題的時候,這個時候如果你技術過硬,能快速的解決問題。

其實也不一定要往架構師方向發展,程序員靠技術吃飯,只能通過不斷的學習新技術、新東西,才能跟的上現在互聯網發展的腳步。這些只是個人見解,歡迎大家評論關注,或者說說你理解的架構師是怎麼樣的


java高級


很明顯,這個問題屬於IT界。工程師當然是說的軟件工程師(Software Engineer)。與程序員,碼農都是屬於從事軟件編程的領域。說的通俗一點,都是在寫代碼。他們的區別應該是這樣的。

  1. 軟件工程師是從事軟件職業的人員的一種職業能力的認證。所具備的技術是比較全面的。具有軟件編程的架構思想。在工作中,把項目作為一項工程來開發。編寫的代碼更具有架構,高內聚,低耦合;魯棒性較好等特點。

  2. 程序員或許是外界對從事軟件編程人員的一種稱謂,或者也是這類人員的自嘲。編寫代碼質量高,稍次於軟件工程師。

  3. 碼農就純屬於自嘲了。本質上與程序員,工程師沒有太大區別。也就是說,這個稱呼更接地氣。當然,這類人從事軟件工程,或許並沒有太嚴謹的架構思維,設計思想;他們僅僅是為完成業務而編碼,從網絡上搬運別人代碼。

歡迎在下方留言評論,分享你的觀點!

夏洛克夜


正常來講工程師範圍更加廣泛,包括程序員,現在有硬件工程師,實施工程師,安裝工程師等等都屬於工程師的範疇,一般稱呼程序員高大上的稱呼軟件工程師。

程序員這個稱呼目前來講最貼切,但是很多程序員又自稱碼農,目前大部分的碼農其實和程序員是一個含義,碼農更多是工作枯燥程序員自嘲一種稱呼,覺得自己整天做在電腦旁邊和農民工沒有多少差異,真正意義上的碼農屬於代碼的搬運工,從網上找找代碼直接複製粘貼,然後進行調試。

碼農主要指的做一些重複性工作,而且平時加班加點情況特別嚴重,在印度很多高中生直接就開始定向培養軟件外包人才,直接培訓如何寫代碼如何進行項目模塊功能的實現,在中國很多職業學院也在做類似的事情,早期大量網頁設計代碼都是這麼出來的,不過隨著人工智能的發展,這類技術人員市場價值會進一步縮水,不止是程序員這塊很多重複工種都面臨著被淘汰的命運,表面上看是人工智能的發展導致造成的,其實還是科技生產力造成,人工智能充當了排頭兵的作用。

無論是叫程序員,還是工程師,還是大家自嘲用的碼農,保持自身的市場競爭力才是關鍵,名字只是一個表面的代號而已,現在科技更新速度之快,稍不留神就會發現自己已經落伍了,跟上新的技術熱點,讓自己時刻保持市場競爭力才是正道。

希望能幫到你。


大學生編程指南


工程師,攻城獅,工程師是個比較泛泛的說法,包括很多種,比如軟件工程師、硬件工程師、機械工程師、測試工程師、器件工程師等等。

程序員也就是軟件工程師,主要工作是編程,用編程語言編寫出程序,包括跑在電腦上的程序,和跑在手機上的APP。

碼農一般是程序員的自嘲……碼農每天工作就是敲代碼,或者說是複製粘貼代碼,所以碼農說自己是搬磚的。

中國的程序員千千萬萬,但是面對巨大的需求,還是很缺好的程序員,所以很多人不管是學什麼專業的都要來當程序員,以為能夠翻身做主賺錢,其實程序員還真不是那麼好當的。

只看到了光鮮亮麗的一面,而沒看到辛苦、無奈的一面。

程序員們不是那麼好當的。


萱言聊管理


一句話 年薪不一樣[呲牙][呲牙][呲牙]


程序汪


工程師包括的工種很多,如軟件工程師,軟件工程師又分為多個工種:軟件開發工程師、軟件測試工程師、軟件運維工程師、數據庫管理員等。程序員專指軟件開發工程師。碼農是程序員對自己的戲稱之一。外行人把編程看得太神秘,給了程序員一些高大上的稱呼,如“研發”。


小鳥慢慢飛


我們對大部分軟件開發人員統稱為軟件開發工程師,需要在有限的時間裡開發出有價值的應用程序,其中包含兩點,一是開發目標,另一個則是開發成本;

程序員通常是由興趣驅使,主動的研究一些具有挑戰性的技術,給人以技術感及理想色彩,他們追求極致,會採用最新的方法,因此工程師更注重時間,而程序員則更在意執行時間,程序員經過一段時間的成長才能成為一個軟件開發工程師;

而碼農常常被成為藍領工人(戲稱“人肉編碼機”),沒有人願意做代碼的搬運工,因為軟件業裡的體力勞動者幾乎就是笨蛋的代名詞,也無法體現程序員的邏輯和真正意義。

如果還想要知道其他關於程序員的知識,可以諮詢或私信小博~


北大青鳥中博軟件學院


沒有太大的區別,外科醫生和內科醫生是沒區別,婦科醫生和兒科醫生什麼區別?????


分享到:


相關文章: