倍可親

回復: 0

一個32歲入門的70后程序員給我的啟示

[複製鏈接]

845

主題

1065

帖子

1953

積分

商務合作夥伴

有房有車(十三級)

積分
1953
天地一笑 發表於 2016-6-16 23:42 | 顯示全部樓層 |閱讀模式
  大家好,我是帥氣小伙,今天為大家帶來一個非常勵志,讓我反思的故事。今天為大家講的是我父親是如何用行動教會我成為程序員的。

  歲月的錘鍊

  

  圓口介面的鍵盤,2003 年的

  有人問這個鍵盤難道沒有擦過嗎?不是的,是擦不掉的歲月痕迹。如果有注意到細節的朋友會發現,程序員什麼鍵位用得最多,(除了ASDW,YUHJ,那是我小時候玩拳王留下的)。這個鍵盤雖然老舊,但是我爸一直不捨得扔。03 年的時候,他從二手市場買回來了這台二手電筒腦,開始自學彙編。我爸是只有初中文化,但是有超強的動手能力。

  零編程基礎入門嵌入式開發

  因為當時 03 年的時候,他剛從一家電子廠辭職,他在電子廠里看到了單片機這種玩意,他看到了他們工程師的工資和待遇,而當時的他只是一名流水線上的焊錫工,雖然是個組長,但是也感覺到了職業的局限性。(這也帶給我們一個啟示,作為男人,如果覺得職業看不到頭,趁早換工作吧,如果不趁早,你會在以後的家庭壓力中選擇妥協,再也看不到頭了。)辭職的第二天,他就買回了這台二手電筒腦,和一台模擬的燒寫機器(把程序寫到晶元的機器),一本彙編語言入門的書,開始了他 12 年的嵌入式開發之路。(這裡給我的啟示是,說學就學,不要想著看看怎麼入門,最好的入門技巧就是動手。)

  圖書館抄書的怪蜀黍


  

  這是他當時學C語言的時候在新華書店偷偷抄的

  我記得初中的時候每周六我爸都會帶我去新華書店看書,然後去到那裡,每次都是他叫我看著圖書館管理員有沒有來,然後他就在那裡專心地去抄寫這些代碼片段(這種學習方法在我看來,現在就是個笑話,隨便打開一個網站,代碼都是一堆堆的,但是話又說回來,你們在這些源代碼中學到了什麼,記住了嗎?會靈活運用嗎?從前輩的學習方法來看,記錄一些常用的代碼片段還是很用必要的,你的 github 有一套自己的代碼片段嗎?如果沒有那就趕緊收集!)但是我爸的筆記,我每次問他,這是什麼項目的,他都能記得很清楚,當然他當時入門的時候是非常痛苦的,一個英文單詞都不懂,可想而知。可是大家的基礎應該比我爸高很多吧,所以不要懷疑自己是否能夠學會編程,是一定能夠學會的。

  程序員特技—專註


  我的親人總是對我說:「你啊,坐久了要多起來走走,看看遠處,這樣子才好。」可是我覺得大部分程序員都做不到,因為編程是根本停不下來的,一旦你入門之後,你就會有種時刻想創造的感覺。這是寫程序寫出來的專註。說到這,我就想問問大家:「你能夠專註多少個小時?」我把這個問題拋給了我爸,我爸笑著跟我說:「用煤氣,把一個裝滿水的平底鍋燒穿需要多少時間?」這是他的一次真實的經歷,那是他在用彙編語言編寫一個 MP3 播放器,在調試的過程中,忘記了自己在燒開水,幸虧煤氣燒完了!說這個故事只想告訴大家一個道理:「寫程序你必要保持高度的專註,但是不能夠疲勞過度地專註。」

  編程需要的是流程再造

  軟體工程跟建築學很像,它們都是基於現實的技術,搭建最好的解決方案。「鋼筋,混凝土」這些都是做好的,都可以直接拿來用,編程也是如此,嵌入式開發也是如此。

  

  這是一塊移植了 UCOSII 系統的 STM32 實驗板

  這塊板嵌入了 UCOSII 系統,可同時執行多個任務,並可指定任務優先順序。通俗地說,你可以邊聽音樂邊打字。雖然看起來很低級,但是嵌入式就是這樣。很高端吧。但是我一問我爸,你是怎麼做出來這塊板的,你真的這麼厲害用C語言寫了一個操作系統?

  板子是自己畫的,其他的晶元都是買的,CPU 程序是自己寫進去的。原來嵌入式開發所做的事就是負責把各個功能模塊合理設計,用程序去調度。現在成熟的晶元都是廠商寫好了程序,提供外部調用介面,開發人員並不需要了解它裡面的內容就可以開發了。這對我以後學編程啟發很大。我的老師曾經說過:「軟體工程師之所以能夠寫出解決實際問題的程序,是因為他們懂得流程再造,用現實的輪子(技術)去實現這個流程」。想成為一名軟體工程師首要的不是編程語言能力的把握有多麼厲害,而是懂得把現實生活中繁瑣的流程通過計算機科學來簡化,我覺得這才是真正的軟體工程師。我爸的編程基礎雖然沒我強,但是流程再造的能力比我強太多了。也許這就是經驗吧。

  

  這是它給我提供的串口應答式發送的流程(可能有錯)

  我把我爸逼成了偽全棧

  大二時候的我,學了C#,會做一下簡單的 winform 程序,然後就開始飄飄然了,跟我爸吹牛了,當時我爸高興壞了,直接就給我接了一個真實的項目,真金白銀啊,我當時還傻傻地答應了。由於是真實的項目,程序的容錯必須很高,你不能夠點幾下就 throwexception 吧,但是我做的項目都是校園裡面的實驗,過家家玩的而已,雖然老師給了好評,這都是大學裡面的花拳繡腿,真正派上用場的時候,確顯得蒼白無力。理所當然,我的程序終將不能按時完成。我爸意識到了,他笑著跟我說:「你教我學 C# 吧,我們一起探討這個程序。」沒辦法啊,只能讓我爸去學吧,一個星期後,他開始與我并行開發,這是我跟我爸同台工作最好的回憶。為什麼我爸能夠在一個星期學會C#(只有C語言基礎)?

  語言都是通的,變的只是表達方式,思維和流程是不會變的


  我們的老師從一開始就教我們畫一些簡單的流程圖,但是我們很多人都覺得這太簡單了,沒什麼意思,於是就開始去追求那些表面華麗的界面,去滿足自己好奇而又虛榮的心,但是他們錯過的是真正的編程技術,這就是當時的我。有很多人都覺得大學的課程很基礎,實際用到項目的很少,是根本不能拿來做項目,書本上學的都過時了。

  而實際上,書本教會的是我們寫字(編程)的姿勢(方法),教會我們如何拿筆(寫程序),如何寫好字(好程序),一旦你學會了就能夠寫出一手好字(好程序)。所以有很多人寫不好字(程序),那就是在小時候練字(初學編程)急於求成,想著去玩(炫耀)。這是我最深刻的反省,也是對各大初學者最好的忠告,編程必須耐得住寂寞!

  程序員要時刻認識自己

  當時,我是膨脹了,有點自以為是了,就覺得自己行,然後就答應項目了,結果幸虧我爸厲害,不然可是要賠錢的。作為程序員,必須了解自己的水平上限。知己知彼(我能做,你不能做),百戰不殆(我就是要這麼多錢)。對的,時刻了解自己水平上限是有助於自身價值的評估的,例如你跳槽了,你對比同行,你的水平在哪裡。決定市場價格的並不是企業本身,而是社會必要勞動時間(別的程序員要多久才能夠做出來)。而最好的認識就是看最新的技術,了解行業的趨勢。這樣才能夠讓自己立足於高薪階層。

  做一名守信用的程序員


  我爸當時跟我說:「既然你答應了人家,無論你有千百個理由都要給人家完成,完成不了就是你的錯,因為你對人家承諾過。」這不是在講道德規範,而是一個程序員的職業操守,因為這樣,我爸能夠接手到很多外包的項目,因為他在別人眼裡只有兩個字:「可靠」。也許這就是程序員的個人品牌吧,如果你在企業中能夠有這樣的品牌,能不升職嗎?

  總有人質問:「我現在學編程晚嗎?」,「我 30 歲之後還能繼續寫程序嗎?」,「學編程難嗎?」看完這篇文章后,我相信你不會再問了,因為如果你真的是熱愛編程,你就應該像我父親那樣,無論現實如何逼迫,初心永遠不忘。雖然,我跟我的父親沒有太多的語言交流,但是這麼多年的耳濡目染,足以讓我發出:「謹遵父訓,不忘初心」。

說的好啊!我在倍可親論壇打滾這麼多年,所謂閱人無數,就算沒有見過豬走路,也總明白豬肉是啥味道的。一看到樓主的氣勢,我就覺得樓主同在社區里灌水的那幫小混蛋有著本質的差別,那憂鬱的語調,..........
您需要登錄后才可以回帖 登錄 | 註冊

本版積分規則

關於本站 | 隱私權政策 | 免責條款 | 版權聲明 | 聯絡我們

Copyright © 2001-2013 海外華人中文門戶:倍可親 (http://big5.backchina.com) All Rights Reserved.

程序系統基於 Discuz! X3.1 商業版 優化 Discuz! © 2001-2013 Comsenz Inc.

本站時間採用京港台時間 GMT+8, 2024-3-29 04:00

快速回復 返回頂部 返回列表