路要怎么走?關于程序員成長的一點思考

程序員的我們,是否想過今后的路該怎么走、如何發展、技術怎樣提高?其實這也是我一直在思考的問題。下面就此問題,分享下我的看法。因為我閱歷有限,有什么說的不對的,大家見諒,千萬不要噴……

程序員的休息一刻

一、程序員應該打好基礎

1. 現在開發工具眾多、語言泛濫,經常聽人說“不學CC++神馬都是浮云”、“CC++才是萬王之王”,CC++就真比PHP、Lua、AS、JAVA牛嗎?

其實不在于語言本身,而在于CC++依附的平臺。因為最靠近操作系統,所以能發揮其它語言不具有的性能優勢,而且很多數據結構、算法、特殊功能類,CC++是不提供的,需要自己實現。這時就需要自己去溫習“數據結構”、“算法”、“TCP/IP”、“操作系統原理”、“編譯原理”等這些知識。正因為如此,我們學習的東西被沉淀下來,也正因如此,CC++經過定制的功能比封裝好的功能性能高。

我上大學做項目時,用的是.net平臺C#語言, 因為我本性好專研,老師都是把需要研究、比較難的問題交給我。但C#無論是性能和功能都是都是無法跟CC++比的,記得當時是要做一個“遠程控制”軟件,配置IP和端口后需要連接動態生成客戶端程序(木馬),但C#是不提供這個功能的。這也是我工作后轉為CC++程序員的原因,碰巧也是開發遠程控制軟件。剛開始寫出來的程序偶爾會莫名奇妙的崩潰,但經過兩個月和更長的時候后,我掌握了CC++。在此要感謝我工作時的指導老師翁躍龍,沒有他我的路不會這么平坦,他教我的不僅僅是技術,更多的是解決問題的思路和做人。

2. 有些人會說大學學的東西是膚淺的,是沒有用的。想想看,在學校的時候我也經常這么想,但出來后才知道這些東西有多么重要。不過大學學得再扎實,出來后仍然是需要再溫習過的。因為上學畢竟實踐少,所學不能所用,計算機是個應用驅動的學科。我們再來看“計算機考研”專業課考的什么(這里并不是說考研就一定好),“數據結構”、“計算機組成原理”、“操作系統”、“計算機網絡”。“數據結構”、“計算機組成原理”這兩門課程擺在前面,可見其重要性,分別是軟件和硬件最重要的兩門基礎課。我不相信不學好“數據結構”能夠把性能優化做得很好。若說自己學好了,能不看書、不查資料,說出“B+樹、B-樹的應用和區別”、“KMP為什么能快速匹配字符串”、“快速排序在什么情況會蛻變為o(n^2)”嗎?

我也不相信不學透“計算機組成原理”能搞通匯編和內核,不知道“CPU和I/O的交互過程”、“指令的執行通路”、“CPU運算器的工作原理”,如何寫出高效的匯編代碼?如何弄清楚內核中“中斷”、“GDT”、“IDT”這些概念,實模式保護模式如何切換? “操作系統”和“計算機網絡”則是兩門非常重要的支撐學科,信號量為什么是最快的同步方式、線程調度比進程調度快、為什么要做內存緩沖池,這些都是來自“操作系統”。而“計算機網絡”主要是講述TCP/IP的,為什么得問“對于一個具有幾百萬粉絲的用戶,數據如何實時投遞到所有用戶?”要使用多播的方式解決、“如何計算出C/S單向的延遲?”發送ICMP包測量,這些都是來自它。

我們大學學的課程經過多少國內外知名學者專家研究過的,所以計算機理論課是基礎,是解決問題的根源。“算法分析與設計”是“數據結構”的延伸,Divide Conque、貪心、動態規劃對于程序算法的優化有很大的指導意義。同樣,“計算機體系結構”也是“計算機組成原理”的拓展。其次,“編譯原理”、“數據庫”、“軟件工程”等學科的重要性也不言自白。

關于程序員成長的一點思考

二、實踐、理論、再實踐

作為程序員的我們,滿足于實現一個程序功能的快感,得意于從網上下載別人的代碼加到自己的程序中,陶醉于自己寫了上百萬行代碼。有想過自己是在創造嗎,還是裝配車間的技術工人。日趨成熟的開發工具,逐步把有豐富想象力的我們淪為奴隸。從網上下載個壓縮庫就用著、成熟的加密算法直接使了、包裝好的類庫就include。為何不探究其算法實現、性能優化、底層機制。有人會說很“難”啊!究竟是難,還是掌握的知識不夠,還是理論沒有達到一定高度。

很難想象不學習“計算機圖形學”,去做3D項目客戶端圖形算法的后果;不研究“數據挖掘”去分析大量客戶數據會做得多好;不攻讀“概率論”、“線性代數”、“人工智能”去設計AI有多么智能。很多人說,這些東西游戲用不著啊,學了有什么用?我承認初學編程時,這些東西只是高談闊論。若我們工作了n年后,還只是熟練地做些coding,和剛畢業的學生有什么區別。編程工具只是“工具”而已,別忘記了我們是改變世界的程序員,不提高理論,何以創新、公司拿什么優勢和別人去競爭。

“研發”是“研究”和“開發”兩大塊,只做開發,不做研究,對個人和公司都只是短期目標, 當然理論提高了,是需要投產的,不然理論很快淪為“空想社會主義”,公司白花銀子養活研究部門。“實踐、理論、再實踐”,符合馬克思主義哲學思想,也是計算機學科的價值體現。真正的計算機科學家不是只搞理論的,理論是要應用到產品中的。工程師也不是只做開發不做研究的,是要應用創新,理論微創新。計算機科學家相比于程序員,主要是數學功底相當深厚,所以他們能在理論上有突破。

關于程序員成長的一點思考

三、技術、管理兩路線

1. “游戲能玩多深,技術就能做多深”,這句話說得很好。只因為我們執著,所以在游戲中能攻破一層層難關,凌晨2、3點還能練級打裝備。若能走回正道,做技術就像玩游戲一樣,技術做不深才怪呢。走技術路線的人,一定是對技術癡迷的人。但要走得長遠,我們需要把技術做穿、做透。如何做穿、做透?計算機底層(C、匯編、逆向工程、驅動、內核)、計算機算法(網格計算、音視屏壓縮、語音識別…)、架構(軟件工程、跨平臺、多語言等)都要有涉及。只有我們掌握了這些,才能做到“看問題看到本質”、“思想有穿透力”。這些才是最寶貴的,需要沉淀下來,僅僅靠做項目、寫代碼是無法達到的。

2. 對于走管理路線的人,是具有“完成任務為第一要務”、“有計劃、善于管理時間”、“善于與人打交道”性格特點的人, 重要的是“綜合素質”,而不是“專攻”。但是這些都是可以改變的,很多公司也會選擇技術做得最優秀的人做管理。由于我是一個技術癡迷狂,管理這塊,我沒有發言權,不做多解釋。

四、心態

1. 人活在世界上在于奉獻而不是索取,幫助別人是一件很快樂的事情, 作為程序員的我們心胸要開闊些,低調些、虛心些, 公司的李老師、老張就是一個心胸很寬廣、低調的人,值得學習, 三人行必有我師,我們熟悉的只是自己的這一塊、這個領域,不懂的地方要虛心向別人請教, 我見過浮躁、過于自信的人,也見過做人低調的人,發展結果完全不同。

2. 樂于分享,支持開源。這是一個很需要心胸、氣度的事,也是決定個人、公司發展快慢的重要砝碼。技術發展日新月異,總守著自己手中的那點技術,得不到長足的發展。中國兩千年的封建歷史、門戶關閉政策還不夠慘痛嗎? “技術是交流和玩出來的”, 這是銳安龍哥告訴我的。他也是一個大黑客、正義的黑客,開源是黑客的一項重要精神,所以黑客能引領技術。

3. 每日學習。很多人認為畢業了就不用學習了,或者不用那么那么地學習了。這是一個非常非常錯誤的思想,無論何時何地都要把自己當成菜鳥、應屆生地去學習。書本是學習的一個捷徑,Google、百度解決問題是快,但不是系統化地學習。看書要了解作者背后的知識底蘊,想一想這個問題得解決作者是怎么想到的,這樣比單純解決一個問題更進一層。更重要的是聆聽作者的心聲,感受大師的心態。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454195.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TensorFlow 常見API

數據類型轉換相關API Tensor Shape獲取以及設置相關API Tensor合并、分割相關API Error相關類API 常量類型的Tensor對象相關API 序列和隨機Tensor對象相關API Session相關API 邏輯運算符相關API 比較運算符相關API 調試相關API 圖像處理-編碼解碼相關API 圖像處理-調整大小相關…

python封裝繼承多態_淺談JavaScript的面向對象和它的封裝、繼承、多態

寫在前面既然是淺談,就不會從原理上深度分析,只是幫助我們更好地理解...面向對象與面向過程面向對象和面向過程是兩種不同的編程思想,剛開始接觸編程的時候,我們大都是從面向過程起步的,畢竟像我一樣,大家接…

將萬億以下的阿拉伯數字轉為中文金額

package test.practice.month3; public class Test005 { //可以不用swich case將123456789轉為一二三四五六七八九 //直接用char[] chars {一,二,三,四,五,六,七,八,九}; public static void main(String[] args) { System.out.println(getCMoney(102030405067L)); } private …

8.2 命令歷史

2019獨角獸企業重金招聘Python工程師標準>>> 命令歷史 history //查看之前的命令.bash_history //存放之前敲過的命令,在 /root/ 目錄下最大1000條 //默認參數值是1000條變量HISTSIZE/etc/profile中修改 //在其中可編輯HISTSIZE參數HISTTIMEFORMAT"…

使用GCC生成無格式二進制文件(plain binary files)

使用C語言生成一個二進制文件 使用自己喜歡的文本編輯器寫一個test.c: int main() { } 再使用如下命令編譯: gcc –c test.c ld –o test –Ttext 0x0 –e main test.o objcopy –R .note –R .comment –S –O binary test test.bin 最后生成的二進…

TensorFlow 實例一:線性回歸模型

代碼 # -- encoding:utf-8 -- """ Create by ibf on 2018/5/6 """import numpy as np import tensorflow as tf# 1. 構造一個數據 np.random.seed(28) N 100 x np.linspace(0, 6, N) np.random.normal(loc0.0, scale2, sizeN) y 14 * x - …

python后端數據發送到前端_Python Django 前后端數據交互 之 后端向前端發送數據...

Django 從后臺往前臺傳遞數據時有多種方法可以實現。最簡單的后臺是這樣的:from django.shortcuts import renderdefmain_page(request):return render(request, ‘index.html‘)這個就是返回index.html的內容,但是如果要帶一些數據一起傳給前臺的話&…

Dapper的基本使用

Dapper是.NET下一個micro的ORM,它和Entity Framework或Nhibnate不同,屬于輕量級的,并且是半自動的。也就是說實體類都要自己寫。它沒有復雜的配置文件,一個單文件就可以了。給出官方地址。 http://code.google.com/p/dapper-dot-n…

函數名作為參數傳遞

假如不知道signal的函數原型,考慮child_handler函數的參數從哪里來? void child_handler(int sig) { if (sig SIGINT) kill(pid_parent, SIGUSR1); } int main(void) { ...... signal(SIGINT, child_handler); ...... } 1、…

易語言神經網絡驗證碼識別_遞歸神經網絡 GRU+CTC+CNN 教會驗證碼識別

利用 NLP 技術做簡單數據可視化分析Chat 簡介:用遞歸神經網絡采用端到端識別圖片文字,遞歸神經網絡大家最早用 RNN ,缺陷造成梯度消失問題;然后采用了 LSTM,解決 RNN 問題,并且大大提高準確率;現…

GCC 生成的符號表調試信息剖析

GCC把C語言源文件('.c')編譯成匯編語言文件('.s'),匯編器把匯編語言文件翻譯成目標文件('.o'),最后由鏈接器鏈…

《操作系統》OS學習(一):OS相關

清華大學操作系統OS(向勇、陳渝)視頻地址:http://www.xuetangx.com/courses/course-v1:TsinghuaX30240243Xsp/about 在ucore實驗中,一些基本的常用工具如下: 命令行shell: bash shell -- 有對文件和目錄操作的各種命令…

Android4.0藍牙使能的詳細解析

毫無疑問,bluetooth的打開是在Settings中進行的操作。因此,冤有頭,債有主,我們來到了Settings.java中,果然發現了相關的代碼如下: mBluetoothEnabler new BluetoothEnabler(context, new Switch(context));…

第一次沖刺

本人小組分工角色:產品負責人 本組沖刺訂單介紹:經過小組的成員討論,我們大概確立了一個沖刺的訂單是完成一個簡易的長沙學院網站項目。 最后完成情況概述:經過大約兩周的努力,我們組的編程人員運用python構建了一個簡…

移動端導出excel_連載系列【4】Excel開發移動端quot;APPquot;

前三篇文章介紹了百度地圖生成器、源代碼編輯器、GPS經緯度批量轉換工具、源代碼編輯器中添加自定義功能按鈕和地圖控件。這些寫好的Java Script代碼雖然可以實現所有期望的結果,但畢竟不是一個HTML文件,不便于傳播和使用,更無法變成一個類似…

《操作系統》OS學習(二):啟動、中斷、異常

Bootloader:加載OS。操作系統一開始是放在DISK(硬盤)中,并不是放在內存中。 BIOS:基本I/O處理系統。存放在ROMRead-Only Memory)只讀存儲中 BIOS(Basic Input/Output System)基本輸入輸出系統。…

[GCC for C]編譯選項---IDE掩蓋下的天空

編譯選項 ---------IDE掩蓋下的天空 /*************************************** * gcc for c language ***************************************/ Single Source to Executable $ gcc helloworld.c [-o howdy] 默認生成的名字a.exe ______________________________________ …

2016級算法第二次上機-F.ModricWang's Number Theory II

891 ModricWangs Number Theory II 思路 使得序列的最大公約數不為1,就是大于等于2,就是找到一個大于等于2的數,它能夠整除序列中的所有數。 考慮使得一個數d整除數組中所有數的代價: 如果一個數不能被b整除,那么可以花…

常用css屬性集(持續更新…)

禁止換行,超出部分顯示…:a. 代碼:.hide_word{ max-width: 100px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } b. 效果: 本文轉自 bilinyee博客,原文鏈接: http://blog.51cto.co…

parallels網絡初始化失敗_33 個神經網絡「煉丹」技巧

自然語言處理Andrej Karpathy 是深度學習計算機視覺領域、與領域的研究員。博士期間師從李飛飛。在讀博期間,兩次在谷歌實習,研究在 Youtube 視頻上的大規模特征學習,2015 年在 DeepMind 實習,研究深度強化學習。畢業后&#xff0…