編程到底難在哪裡?

海寶海寶


作為一名IT行業的從業者,同時也是一名教育工作者,我來回答一下這個問題。

首先,編程可以分為三個階段,第一個階段是對於編程語言自身語法的理解,這個部分雖然也具有一定的難度,但是大部分人,即使沒有任何編程基礎,經過一個系統的學習過程,都能夠掌握。

第二個階段是通過編程語言來完成各種邏輯操作,這個部分正是編程的難點所在,此時需要掌握各種算法和數據結構。實際上,編程問題說到底就是數學問題,但是並不是數學基礎好的人,就一定能夠順利掌握編程,這中間還需要一個轉換的過程,關鍵就在於算法設計能力的培養,這個過程比較考驗程序員的邏輯思維能力和抽象能力。

第三個階段是通過編程來完成各種資源的整合和操作,這個部分也是編程的一個難點,此時對於程序員的知識結構有較多的要求,涉及到操作系統、計算機網絡、數據庫等計算機基礎知識。隨著當前雲計算和大數據的發展,目前雲計算平臺和大數據平臺對於程序編寫的影響越來越大,因為程序員需要藉助於這些平臺來完成資源整合。相對於算法設計來說,雖然這部分的難度也比較大,但是經過一個系統的學習過程,程序員的資源整合能力也會越來越強,這部分難點是完全可以通過努力來解決的。

對於很多初學編程的人來說,學習最大的難點在於如何建立自己的編程思想,而要想建立自己的編程思想,可以從編程過程和編程方法兩個方面入手。雖然不同的編程語言有不同的編程過程,但是說到底就是一個抽象問題,而要想提高自身的抽象能力,多做實驗是非常有效的方法。

我從事互聯網行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智能領域,我會陸續寫一些關於互聯網技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收穫。

如果有互聯網、大數據、人工智能等方面的問題,或者是考研方面的問題,都可以在評論區留言,或者私信我!


IT人劉俊明


編程,按你所處的階段來講吧,不同階段難在哪裡?

第一階段,如果你還沒學編程,剛開始,那最難的應該是你學習語言,

那些看似英文,又不是英文,

看似大括號,小括號又不是你學的數學。

看似一行還有好多空間卻非得跳行。

懵逼了吧,各種語法規則,你從來都沒見過的代碼,函數,對新人來說難不難。估計都是感覺天花🌸亂墜,它認識你,你不認識他。這個階段沒有什麼好的方法,拿出你小學學習的心態,那就是,背,背,背!直到你看到啥都想int--if --includ[捂臉]

第二階段,當你熟悉了這些基本代碼,語法規則,就是你學會邏輯的問題了

按照編程的邏輯,也是電腦傻傻的邏輯

#include<stdio.h>

typedef struct student

{

int num;

char name[20];

int Score1;

int Score2;

int Score3;

float average;

}student;

student st[3];

void CreateStudent(student st[])

{

int i,j;

float Average;

for(i=0;i<3;i++)

{

printf("請輸入學生%d的資料:\

機器魔都


作為基層程序猿多年,總結一下編程的難點:

1、初學者。編程是用計算機語言和計算機交流,你輸入什麼,你期望計算機理解之後,輸出你需要的結果。所以這個過程可以概括為“輸入–計算–輸出”。學習一門計算機語言,說難不難,說易也不太容易,為什麼呢?如果你是編程的初學者,你要上手一門語言,是非常困難的(天才除外);但如果你是精通一兩門語言,再去學其他語言,可以說一個星期就能熟悉。所以,對大部分初學者來說,編程語言是難點。

2、編程思想。這個是我第一家公司的部門老大常給我灌輸的重中之重:一定要有編程思想。跳過初學者這一關,假設你可以對任何語言順手拈來、即插即用,那麼,你水平就一定很高了嗎?其實不然,這隻能說明你學習能力上一層樓了,但並不說明你就多麼厲害。比如,你熟悉設計模式嗎?設計系統的時候有沒考慮擴展性?是否考慮到性能問題……如果整天只做crud,不去關注以上問題的話,瓶頸是很難突破的。那麼編程思想何來?就要平時多閱讀這類的書籍和文章,比如設計模式,比如高併發系統設計相關知識等。除此以外,還要多思考,為什麼這樣設計,所謂學而不思則罔,思而不學則殆!

3、溝通能力。好了,即使你掌握多種語言,又可以把系統設計要得很溜了,但是如果你是個不會說話的啞巴,你就無法表達出自己的思想,無法向老闆展現你的才能,那麼你的職業生涯會受到很多限制。我自認為本人的溝通能力是弱項,自己也在不斷努力改善這點。現在每次參加討論的時候都會積極發言,表達自己的觀點,除此之外還報了一些口才課,來提升自己的表達能力。

好了,以上總結了三點本人以為編程的難點,如有不當之處,歡迎批評斧正!


愛寫字的猿哥


作為一個自學者的體會:

1,學習編程,就像起初我們學習英語一樣,開始靠死記硬背,基礎零散的每一個單詞的意義和如何應用!

2,當然死記硬背,並不能百分百記住,但要做到看見每一個編程語言要知道是何用途?是何意思?

3,看懂了,不代表就會用,那麼最難的就在這裡了,多多練習,從不斷的敲打代碼,去熟悉、記憶、去完善沒這個過程,貴在堅持!貴在堅持!貴在堅持!!!

本人從2009中旬自學半年,之後不斷學習,直至現在扔在不斷鞏固學習!期間學了設計PS,CDR,CAD,AI,視頻後期Pp,如果說難在哪裡?還是那句話,能看懂,知道什麼作用,不叫會,只是叫略懂,真正的高手閉著眼睛都可以快去熟練敲打代碼,哈哈,所以貴在堅持!



千與優選


作為一名程序員出身的IT從業者,總感覺這個問題值得去增加一個答案。程序員還有另一個外號,那就是碼農,從這一外號可見這份工作並不好做。

首先,寫代碼非常的枯燥,有時候還得有源源不斷地靈感,正因如此,工作中難免會遇到BUG從而拖累整個進展,於是又不得不加班加點熬夜趕進度,非常地辛苦。

其次,碼農在整個生產流程中處於中下層的地位,他們需要在系統分析員、系統架構師以及測試工程師之間相互溝通、相互配合,稍有不慎工作思路就得推倒重來,這對於編程人員來說無異於滅頂之災,想想就很可怕的事情。

最後,自身知識體系也在不斷地退化之中,大學時學的可是C++、Visual Basic、Delphi語言,然而工作之後又流行起JAVA等跨平臺程序設計語言,全新的語法、全新的編程環境都讓他們不敢有絲毫的鬆懈。這無形當中又加重了程序員的壓力。

由此可見,我們還只是簡單地列舉了下可見的壓力,還有那些不可見的,比如靈感缺乏、年齡鈍化、程序測試等等頭疼的環節,它們都能很好地回答“編程到底難在哪?”這一問題。謝謝大家,喜歡我們的答案歡迎關注我們。


互聯網智慧驛站


編程跟藝術創作類似,通過編程創作出偉大的軟件產品,向我們經常使用的電腦的Windows系統、MacOS系統、手機的Andriod和IOS系統、微信、Fackbook等社交軟件都是優秀的軟件產品,編寫的軟件根據應用層次不同簡單分為基礎軟件、中間件軟件、應用層軟件,各層次軟件解決的問題不同,難點各有不同。

1、基礎軟件

基礎軟件是最靠近硬件的軟件系統,例如我們經常用到的電腦操作系統Windows系統,蘋果電腦的MacOS系統,Linux系統,手機的Andriod和IOS系統,還有編譯器系統等,這些軟件比較基礎,很多軟件都依賴基礎軟件,這類軟件對編程技能要求很高,軟件比較複雜,涉及的模塊比較過,工程耗資巨大,向Linux系統,Windows系統這樣的操作系統,都有上百萬行的代碼,工程很巨大,有成千上萬的軟件工程師維護,我們在基礎軟件遠遠落後於歐美國家,前一段時間華為的手機被禁止使用Andriod系統,導致華為手機在國外銷售大跌,基礎軟件是我們需要奮起直追的。

2、中間件軟件

像數據庫軟件,緩存軟件,消息隊列軟件都屬於中間件軟件,這些軟件解決某一領域的問題,像數據庫軟件Oracle在金融、電信領域數據存儲的應用廣泛,賺錢了鉅額的利潤,這類軟件對編程要求也比較高,要求開發的軟件系統比較穩定,我們在這方面已經在奮力追趕了,像BAT這些互聯網大廠已經有自研的數據庫系統、緩存系統、消息隊列系統等中間件軟件已經可以跟國外的媲美了。前幾天報道說阿里的OceanBase數據庫的性能基準測試已經遙遙領先Oracle了。

3、應用層軟件

像社交軟件微信、微博,天貓、京東的電商系統,手機支付系統,360,搜狗等瀏覽器等都屬於應用層軟件,這類軟件解決用戶的需求,需要熟悉用戶的需求,將需求轉化為軟件產品,需要解決系統的高併發,我們在這方面已經完全和國外媲美了,甚至已經超越他們了,像手機支付系統已經遙遙領先國外了。


我們的軟件行業在20、30年的發展,已經在應用層軟件取得巨大進步,中間件軟件近幾年也取得不小的進步,但是在基礎軟件方面落後很多,需要我們奮起直追。


愛比特編程


難在對一個實際問題進行編程。編程並不僅僅是一個敲代碼的過程,它還是對程序員思維想法的一種提煉。記得當初剛學編程那會,我想做一個最簡單的註冊登錄功能,於是我直接根據所學不久的表單元素便輕而易舉地做出來,但我想做得更好一點,於是便加入數據庫知識,將註冊賬號信息存儲起來,登錄時必須與數據庫存儲的賬號密碼進行校驗。後來找了老師問了一下他的觀點,他又跟我普及了網絡安全的知識,我又在其中加入了諸多限制提示功能,並且對代碼進行了微調,防止SQL注入...當時真的學會了挺多。

難在大系統編程中的團隊溝通交流。或許團隊編程中大體是按照總綱來編程,但每個人的編碼習慣都有所不同,分派的任務不換人還好,一換人的話前者所寫的代碼誰認識。同時溝通困難也是一個毛病,團隊中的每個人技術水平不一樣,大家的想法也是不一樣的,在實際開發過程中溝通有礙延誤項目是時有發生的。

難在技術更新速度快,今天的流行技術在明天或許就是過時的了。SSH框架才流行沒多久便被SSM取代了,而現在呢,走在前沿的是SpringBoot框架了。所以技術的快速更新使得我們編程過程中需要不斷掌握新的開發技術,否則我們會被淘汰,這樣一來亞歷山大啊。


工科男的閒暇時光


(1)思維模式的切換。你需要有技術思維。能夠成功建模。這可能是大多數人,沒有信心,或者不適合從事編程的原因之一。說到底,程序員就是在兩種思維模型之間轉換的人。一種是人類看到的感受到的外行人視角,一種是技術思維,即如何通過編程,來完成前者。

(2)語言上的難度,例如 C++ 語言本身。它包含了讀寫兩方面的基本要求,達到你可以面對越來越複雜,越來越難於理解的代碼,而不會感到困難和退縮的程度。很多人看到複雜的代碼時,自信心就已經被擊潰了。C++ 和 彙編,大概是目前難度最大的兩門語言。彙編難度主要是代碼可讀性是最低的,代碼量和跳轉數量是最大的。

(3)超強的對耐心的挑戰,編程中遇到的困難的挫敗感極強,大部分人會對此感到崩潰。編程需要付出和投入極大精力和耐心,對人的能力是很大挑戰,例如,無法完成任務,無法解決某個問題,無法找到問題所在。編程領域,有很多水平體現在穩定可靠性上,當你寫出一個東西,實驗是成功,然而在部署後實際運行時,總是出現隔三差五出現很難解釋的問題的時候,說明你的水平有限。你的水平,和你的成果的可維護性,穩定性,可靠性是成正比的,而很多人可能會比較忽視這種“不夠直觀和直接,難以量化”的能力。它們需要程序員的責任心和經驗的積累,比如說,多線程編程方面的經驗等。

(4)當你掌握了基本編程技術和技巧,可以開始工作時,還有一項潛在的能力在考研你,你的大腦必須能夠完成在比較複雜場景下的調度,和場面掌控能力。比如說,你能夠一個人編寫需要配合的多個應用程序,它們可能來自服務端和客戶端,可能來自不同的功能程序。通過多個應用程序相互協調協作,通過溝通來有條不紊的完成一項任務。你的大腦必須足夠應付這樣的局面。在複雜的環境中,掌控大局,熟練的掌控整體和局部,有條不紊。

(5)需要鋪墊大量基礎知識,才能開始進入實踐。比如說,你要編寫“俄羅斯方塊”這樣一個簡單的遊戲,你需要有數據結構,和簡單算法的基礎知識的積累,而不僅僅是學會了編程語言就可以的。

網由之路


說起編程到底難在哪裡,首先要知道什麼是編程?簡單地說編程就是指導計算機執行任務的行為,通常被我們說成編碼。但是在我們使用計算機或者智能手機的時候,有一部分代碼是在後臺運行是我們看不到的,比如在電腦上我們將鼠標從一個地方移動到另一個地方,操作起來很方便但是這一簡單的操作實現過程,是需要很多行代碼才可以實現的,所以代碼是隨處可見的。這一過程也可以說就是編程的思想過程。 剛開始學習編程的時候,自己也覺得很難並且很枯燥,好多東西自己根本不知道要怎麼處理,代碼寫的也是很不規範,需要很多的腦力和精力去思考一些很抽象的東西,但是接觸時間久了會發現編程其實分3部分,這3部分分別是外界因素導致的編碼反覆修改的難、編碼本身不健壯等導致程序不穩定的難、以及編程人員本身的技術方面等這3個原因。

作為編程人員要減少我們編碼的困難,就要努力的去找尋客戶到底需要的是什麼,有時候科客戶自己都描述不清楚自己的需求是什麼是,我們就要靠思維、靠經驗更加的去貼近客戶想要的,才能避免程序較多的改動。這樣可以有效避免程序反覆修改。所以這種外界因素導致的反覆修改編碼我認為是最難的了。

代碼本身不健壯,這個又要分好多情況,比如時間有限,程序員寫程序思維不斷的在轉,本來週期要1個月才能完成的項目老闆為節約資源壓縮成個月,程序員再牛也難保證程序寫的是比較完美的,可能寫完都沒優化時間,趕工出來的程序一般都不太理想。

程序員本身能力不足的原因,如果讓一群剛畢業的學生一起研發京東淘寶那樣的程序,也不是說不可能,但是絕對不能支持數億人同時在線使用,併發數量級上來程序就掛了,所以相應的程序應該有對應能力的開發人員來完成。對於一個程序來說同時保證程序的複雜度、一致性、可變性和不可見性,又要是高級語言、分時系統、統一開發環境,那麼程序員水平的高低一下就看得見了。

以上就是我認為編程難的3個地方了,希望對大家有用!



小呆日記



普通人:

我今天要買一斤蘋果。

程序員:

我今天要買一斤蘋果。

因為我只喜歡紅富士蘋果,所以我只買紅富士蘋果。

我能接受的最高價格是10元/斤。

正常情況下一斤蘋果用一個袋子能裝下,但是為防萬一,我會帶兩個袋子。

我知道附近的3家水果店,所以我會依次訪問這3家水果店。

根據上述條件,我設計出以下的買蘋果的流程:

這個流程怎麼樣?我來設計一些測試樣例,測試一下這個流程。

測試發現一個問題:如果水果店0和水果店1都有紅富士蘋果並且價格都低於10元/斤,而且水果店1的價格比水果店0更低,那麼我希望買水果店1的蘋果,但我設計的流程會讓我買水果店0的蘋果。

為了解決這個問題,我應該先詢問所有水果店的價格,然後去價格最低的那一家買蘋果。

經過修改,我重新設計出以下的買蘋果的流程:

現在這個流程是不是完美了呢?不是,我還能發現很多問題。如果3家水果店都有紅富士蘋果但都不到一斤,但是三家店加起來能達到一斤,那麼我不應該結束流程回家,而是應該把三家店的紅富士蘋果都買下來。如果我向水果店詢問價格的時候這家店還有紅富士蘋果,但我詢問完所有水果店的價格後這家店的紅富士蘋果賣完了,那麼我的流程會讓我試圖處理不存在的紅富士蘋果。我走路的過程中可能會遇到突發事件,比如發現了新的水果店,比如袋子破掉了蘋果掉一地,對於這些情況我的流程都無法進行處理。

啊問題太多了我懶得再改流程了。我還是去X寶買吧。那麼接下來我要設計一個在X寶買紅富士蘋果的流程……


分享到:


相關文章: