A. lisp語言的快速入門
Common Lisp語言快速入門: Lisp是軟體領域的分裂力量。一方面,Lisp愛好者誓言Lisp比軟體領域內的其它語言都更加快捷、整潔和強大;而反對者則辯稱,不可靠的執行和庫支持不足使得開發者難以在其中編寫任何真正的軟體。事實上,他們都有各自的道理。
第一版Lisp於大約50年前推出,這使得它和FORTRAN一樣,成為現在仍在使用的最古老的編程語言之一。可以證明,它擁有(它們將會擁有)最龐大的特性列表,它也是第一種包括一整套今天我們全都認為是標准語言特性的語言,如垃圾收集、遞歸、函數作為對象、甚至是普通的if-then-else子句。同時,人們也認為它是一款優秀的教學語言:MIT使用方案、Lisp衍生物,傳授它們的介紹性編程類。
我們將一起學習最強大和項目就緒的Lisp版本:Common Lisp,使其正常運行,並了解一些Lisp應用。 代碼和數據並無差異——在Lisp中,代碼只是一個函數對象列表。源代碼和數據源之間不存在區別,允許Lisp把它的內在呈現給編譯器、注釋器和程序員。這允許你方便地本地讀入和評估代碼,甚至可以允許你使用宏。
宏——定義和重新定義任何語言元素。不喜歡條件、或循環或函數的運行方式嗎?好,你可以定義自己的注釋。如果你在代碼中多次執行某個特定的任務,把那個特性添加到語言中不是更加方便嗎?應用Lisp,你可以實現上述功能。
速度——雖然在許多情況下Common Lisp不如C或OCaml這類速度巨人快捷,但它在一系列測試中表現良好,特別是在執行一小段程序的情況下。了解一些基本的編譯器知識,你就能夠編寫出處理列表和大型數字的代碼,在執行速度和內存使用方面都要優於其它語言。
簡化——Lisp的一切功能都基於一些基本的理念——一旦你了解那些理念,你就幾乎能夠處理任何問題。Lisp程序員常常自誇說,僅僅用幾百行代碼,你就能在幾乎任何語言(如C++或Haskell)中執行一個Lisp注釋器。
靈活——以你喜歡的任何方式編寫代碼。更喜歡功能性的編程方法嗎?沒問題!想要完全反復編程嗎?草草寫下幾個快速的宏就可以完成任務。你可以用最方便最高效的方式編寫程序,而且這些程序都能良好地運行。 好,行!我選擇了Lisp,我如何進行安裝呢?
這是棘手的問題。不像是Python或C#一樣,Common Lisp沒有標准執行——該語言由一個規范,而不是執行來定義。Common Lisp也沒有C語言的特點,及在每一個平台上都是一種支配性的執行或流行的執行。每個版本都應執行上述標准,但有一些細節要由編譯器或注釋器來處理,這使得每個執行都稍有不同。
你可以使用幾種選項——在本文中我使用CLISP,它在Windows、linux和Mac(僅PPC)上運行良好。如果你使用英特爾Mac,則必須使用其它執行,如Allegro Common Lisp或SBCL。對於這篇快速入門中的簡單例子,你使用哪個執行都不要緊。
使用Lispbox可以快速安裝Common Lisp系統,但遺憾的是,Lispbox在2012年停止了更新。Lispbox為你提供一個Common Lisp執行、Emacs、SBCL和Slime——Emacs高級Lisp整合模式,許多Lisp程序員會告訴你說,這個組合是使用Lisp的唯一方法。如果你並非Emacs用戶(我本人也和你一樣),不要擔心,它並非必要條件,只是使得編寫Common Lisp程序更加簡便。而如果想要使用最新的Emacs、SBCL和Slime,網路上也有許多教程關於如何配置它們。
安裝過程因平台而異,在Windows中你只能運行安裝程序,多數Linux軟體包管理器提供安裝包等。選擇一個執行並遵循安裝指令即可。打開Common Lisp (CLisp)交互環境的方式是M-x slime,如果你不理解這是什麼意思的話可以通過Ctrl+h松開後按t來學習Emacs的基本操作。但由於Emacs的默認字體不支持中文,所以為了避免教程亂碼,點擊程序窗口左上角的Options,選擇Set Default Font,選擇支持中文的字體後保存。打開REPL(互動式提示符)之後再返回這里,我們繼續往後講。 REPL代表「閱讀-評估-列印-循環」(Read-Evaluate-Print-Loop),它簡單表示注釋器的一個互動式提示符。你可以從這里輸出一些簡單的Lisp代碼。如果你使用另一種注釋器提示符,你可以在這里使用提示符作為計算器輸出一些基本的數學表達式——但它不能正常運行。在CLISP中輸入5*2不會返回任何有意義的結果:
> 5 * 2
5
> 5
5
> 2
2
Lisp並非以那種方式運行,運算符,如「+」不是在數字之間,而是在數字前面,就好像它們是函數名稱一樣。因此,如果你想將REPL當作計算器使用,你必須輸入:
> (* 5 2)
10
> (+ 1 2 3 4)
10
> (+ (* 5 2) (* 10 3) (/ 100 4))
65
對你來說,理解這種用法可能更難一些,但它擁有一些優勢:它便於編譯器解析、它對所有函數和運算符都一樣、它讓你給函數添加盡可能多的自變數——例如,在上面的第二個例子中,你可以任意擴充加數,使得加法函數和總計函數完全一樣。
另外你會注意到,函數名在括弧內,而不像許多其它語言一樣函數名在括弧以外。這表示你要寫(函數自變數)而不是函數(自變數)。
每個Lisp表達式會返回一個值,一個函數總是返回最後一個表達式的結果——即使是NIL,NULL在java或C++中的對等值也是這樣。因此在Lisp中顯示「Hello World」相當簡單:
> Hello World
Hello World
如果你希望在屏幕上列印一些內容,並返回其它內容,你應該使用列印函數:
> (print Hello World)
Hello World
Hello World
這個字元串顯示兩次,一個是列印結果,一個是函數返回的結果。
Lisp表示LIST Processor(列表處理器),Lisp中的幾乎所有內容都以列表的形式存在,因此有時你必須處理列表。定義列表非常容易:
> (list 1 2 3 4 5)
(1 2 3 4 5)
> '(1 2 3 4 5)
(1 2 3 4 5)
第二種定義方法叫做引用,除定義簡單的列表外,它還有更多用途,不過我們必須在後面的另一篇文章中討論那個主題。 Lisp擁有全部標准控制流程方法。定義一個重復一個值的簡單循環相當容易:
> (dotimes (i 10) (print i))0
1
2
3
4
5
6
7
8
9
NIL
同樣,重復一個列表也很簡單:
> (dolist (i '(0 1 2 3 4 5 6 7 8 9)) (print i))
0
1
2
3
4
5
6
7
8
9
NIL
以上兩個函數都是DO函數的特殊版本,它就像在其它語言中組合使用while和for函數一樣。它由三個部分組成:循環變更定義、終止條件和語句主體:
> (do ((i 0 (+ 1 i))) ((> i 10)) (print i))
0
1
2
3
4
5
6
7
8
9
10
NIL
在這個例子中,變更定義部分為((i 0 (+ 1 i))),它定義變數i為0,並在每次循環時調用函數(+ 1 0)。終止條件為((> i 10)),表示在i大於10時函數終止運行。最後主體部分列印i的值。
Lisp中也有條件函數,最基本的條件函數為if函數:
> (if (> 10 20) (print Hello) (print World))
World
World
if函數由三部分組成:條件、then語句和else語句。如果條件為真,則執行then語句,否則就執行else語句。
你可能已經注意到,到現在為止我們僅使用了單個的語句——但如果你需要把幾個語句連接在一起,那該怎麼辦呢?在Lisp中,要將幾個語句連接起來,你需要使用progn這個特殊的控制流程函數:
> (progn (print Hello) (print World))
Hello
World
World
例如,上例允許你在條件函數和循環中使用幾個語句。
如果你想要更進一步的了解和學習Common Lisp,可以搭配學習ANSI Common Lisp 和Practical Common Lisp (實用Common Lisp編程),如果你想再更進一步,可以看一看On Lisp 等參考書。
B. 作為一個程序員,至少需要掌握哪幾種編程語言
至少要學一個底層的語言,如C、匯編之類,這樣才能了解計算機究竟是怎麼工作的,數據和指令是如何存儲的,代碼是如何運行的;至少也要學一門高級語言,如Python、Java之類,因為高級語言語法更簡單,做同樣的工作代碼量更小;最好也掌握一門腳本語言,如Python、bat、Shell、Sikuli等,這種語言可以用來干各種各樣的雜活,可以提高不少效率。
前兩種語言都是可以作為日常工作的主力語言的,第三種可作為工作的輔助,主要還是用於生活。
C. 既然 Lisp 以及基於此的語言好到不行,為什麼基於 C 的語言一經問世便占據統治地位
1、結構化設計語言,語法清晰、結構簡單,模塊化使得程序的各個部分除了必要的信息交流外彼此獨立,便於開發、調試以及調試。2、運算符多,把括弧、賦值、強制類型轉換等都作為運算符處理,靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。3、數據結構豐富,能實現各種復雜的數據類型的運算,引入指針、結構體概念使程序效率更高。4、為操作系統而生,可以像匯編語言一樣對位、位元組和地址進行操作,允許直接訪問物理地址對硬體進行操作,把高級語言的基本結構和語句與低級語言的實用性結合起來。5、程序執行效率高,一般比匯編程序生成的目標代碼效率低 10%~20%。6、可移植性好,C 語言抽象了針對 CPU 編程的細節,能廣泛應用於針對大型操作系統和系統軟體的編寫。7、具備強大的繪圖功能,和 C++ 一樣也可以寫出很優雅的二維、三維圖形和動畫。
C語言在應用軟體、對性能要求嚴格的領域、系統軟體和圖形處理等有良好且廣泛的應用,尤其是某些系統軟體、製作動畫、繪制二維圖形和三維圖形等,模型或者系統建立之後需要計算的軟體更是看中了C語言強大的計算能力。
D. 如何成為 Lisp 程序員的
我成為 Lisp程序員的道路曲折而漫長。我曾於 2007年 10月 3日在自己的日記中總結了自己的學習經歷,現..
E. 作為程序員的你,常用的軟體有哪些
這個就非常多了,下面我以常見的編程開發軟體和資料庫管理軟體為例,簡單介紹幾種,感興趣的朋友可以嘗試一下:
01 編程開發軟體這個要看具體編程語言了,不同語言開發工具自然不同,這里以常見的C/C++、Java和Python為例,簡單介紹3種比較常用的軟體:
這是Windows平台下一個非常專業的集成開發工具,號稱宇宙第一IDE環境,不僅僅只是C/C++,常見的C#、VB等編程語言,這個軟體都能很好支持,智能補全、代碼高亮、語法檢查等功能非常不錯,除此之外,還支持單元測試、代碼重構和分析等高級功能,因此非常適合大型項目開發和維護:
這是一個非常專業智能的Java開發工具,在企業和個人桌面中,有著非常高的使用率和歡迎度,自動補全、語法提示、代碼高亮等功能非常不錯,除此之外,還支持JUnit、CVS整合、代碼重構等高級功能,自帶有Maven和Gradle構建工具,因此更適合Java項目開發和維護,個人使用起來非常不錯:
這是一個非常專業的Python開發軟體,和IntelliJ IDEA一樣,Jetbrains公司的產品,在業界非常流行、受歡迎,智能補全、代碼高亮、語法提示等功能非常不錯,除此之外,還支持代碼重構和分析、單元測試等高級功能,因此更適合大型項目,個人使用來說,也非常簡單,很容易上手和掌握:
02 資料庫管理軟體
這個就非常多了,不同資料庫都有專門的管理軟體和工具,這里簡單介紹3個比較通用的資料庫管理軟體,分別是HeidiSQL、DBeaver和DataGrip,對於日常使用來說,非常不錯:
這是Windows平台下一個非常輕巧靈活的資料庫管理軟體,基於Delphi開發而來,目前支持MySQL、MariaDB、MSSQL、PostgreSQL等主流資料庫,常見的建庫建表、視圖索引、觸發器等基本功能,這個軟體都能很好兼容,除此之外,還支持SQL腳本導入導出、數據備份恢復等功能,對於日常資料庫管理來說,非常不錯:
這是一個基於Java開發的資料庫管理軟體,免費、開源、跨平台,目前支持Oracle、MySQL、PostgreSQL、SQL Server等十幾種主流資料庫開發,建庫建表、視圖索引、觸發器、存儲過程等基本功能 都 可輕松查看和設計,資料庫導入導出、數據 恢復 備份等功能也都非常不錯,對於日常資料庫管理和維護來說,是一個非常不錯的工具:
這也是一個通用的資料庫管理軟體,Jetbrains公司的產品,支持跨平台,但原則上針對個人不免費,常見的PostgreSQL、MySQL、Oracle等資料庫,這個軟體都能很好支持, 數據導入導出( 恢復備份 )、 智能代碼填充、版本 集成 控制等功能非常不錯,對於日常資料庫管理來說,也是一個不錯的工具:
每天常用開發工具:
0.Git:分布式版本控制系統;
1.IntelliJ IDEA:java語言開發的集成環境,IntelliJ在業界被公認為最好的java開發工具之一;
2.Sublime Text:不只是代碼編輯器;
3.Postman:Http請求模擬工具和功能強大的網頁調試工具;
4.DataGrip:支持幾乎所有主流的關系資料庫、多功能的資料庫操作工具;
5.Vagrant:用於創建和部署虛擬化開發環境,配合虛擬機使用;
6.Gradle:自動化構建工具;
7.JIRA:項目與事務跟蹤工具;
8.iTerm2:Mac上的終端工具;
9.Jenkins:持續集成工具。
做了一個寫代碼用了十幾年的人,很多編程的習慣已經養成了,現在就羅列下每天必用的軟體:
直接安裝的linux系統,因為幾乎所有的代碼都是在linux下完成
不同的開發語言,每天要用到的軟體可能不一樣。
我是開發java web的,電腦安裝了很多工具,但是說每天要用到的好像就幾個。
作為程序員使用最多的軟體,莫過於編程開發所用到的軟體編輯器,但是編輯器的種類有很多。我們需要做到的是,找到你最喜歡的編輯器然後熟練的使用它。
同時掌握常見的一些快捷鍵的操作方式,從而來提升我們的工作效率,而不是以軟體而論軟體,什麼都去接觸使用。畢竟軟體是工具是幫助我們提升開發效率。
下面我就列舉我們PHP經常使用的軟體
IDE工具類軟體這一類是開發軟體編寫代碼用的。這一類的軟體非常多,我就推薦一個經常使用的PHPStorm,因為太多的話大家也用不到,也沒有那麼多的精力去熟練每一個編輯器。
PHPStorm是 JetBrains 公司開發的一款商業的 PHP 集成開發工具,旨在提高用戶效率,可深刻理解用戶的編碼,提供智能代碼補全,快速導航以及即時錯誤檢查。可以說是PHP開發程序員必備的神器。
常用快捷鍵如下:
1.復制快捷方式
F5 復制文件/文件夾
CTRL+C 復制
CTRL+V 粘貼
CTRL+X 剪 切,刪除行
CTRL+D 復制行
CTRL+SHIFT+V 可以復制多個文本
2.自動代碼
ALT+回車 導入包,自動修正
CTRL+ALT+L 格式化代
碼CTRL+ALT+I 自動縮進
CTRL+ALT+O 優化導入的類和包
CTRL+SHIFT+SPACE 切換窗口
CTRL+SPACE空格 代碼自動完成,代碼提示,一般與輸入法沖突
CTRL+ALT+SPACE 類 名或介面名提示(與系統沖突)
CTRL+P 方法參數提示,顯示默認參數
CTRL+J 自動代碼提示,自動補全
CTRL+ALT+T 把選中的代碼放在 TRY{} IF{} ELSE{} 里ALT+INSERT 生成代碼(如GET,SET方法,構造函數等)
3.運行
Alt + Shift + F10 選擇的配置和運行
Alt + Shift + F9 選擇配置和調試
Shift + F10 運行
Shift + F9調試
Ctrl + Shift + F10運行范圍內配置編輯器
Ctrl + Shift + X運行命令行
4.其他快捷方式
CTRL+Z 倒退(代碼後悔)
CTRL+SHIFT+Z 向前
CTRL+H 顯 示類結構圖
Ctrl +F12 文件結構彈出
CTRL+O 魔術方法
CTRL+/ 注釋//取消注釋
CTRL+SHIFT+/ 注釋/*...*/
ctrl + '.': 折疊選中的代碼的代碼
ALT+ / 切換代碼視圖,標簽切換
5.其他快捷方式
CTRL+Z 倒退(代碼後悔)
CTRL+SHIFT+Z 向前
CTRL+H 顯 示類結構圖
Ctrl +F12 文件結構彈出
CTRL+O 魔術方法CTRL+/ 注釋//取消注釋
CTRL+SHIFT+/ 注釋/*...*/
ctrl + '.': 折疊選中的代碼的代碼
ALT+ / 切換代碼視圖,
資料庫相關常用的工具 Navicat for MySQL是管理資料庫的操作工具,都是可以連接遠程的雲資料庫。方便簡化開發,還可以手動備份、可視化的sql分析。
常用快捷鍵:
ctrl+q 打開查詢窗口
ctrl+/ 注釋sql語句
ctrl+shift +/ 解除注釋
ctrl+r 運行查詢窗口的sql語句
ctrl+shift+r 只運行選中的sql語句
F6 打開一個mysql命令行窗口
ctrl+d (1):查看錶結構詳情,包括索引 觸發器,存儲過程,外鍵,唯一鍵;(2):復制一行
ctrl+l 刪除一行
ctrl+n 打開一個新的查詢窗口
ctrl+w 關閉一個查詢窗口
ctrl+tab 多窗口切換
伺服器連接軟體XShell6是非常強大的SSH遠程終端客戶端,幫助我們連接遠程的Linux伺服器來進行操作。
粘貼:Shift+Insert
歷史 命令編輯ctrl + p 返回上一次輸入命令字元
alt + > 返回上一次執行命令
其它
ctrl + s 鎖住終端
ctrl + q 解鎖終端
ctrl + l 清屏相當於命令clear
Tab鍵,快速補全命令
輕量級文本編輯器Notepad++。這個很輕量,打開一下文本非常的方便。
常用快捷鍵
Ctrl+C 復制
Ctrl+X 剪切
Ctrl+V 粘貼
Ctrl+Z 撤消
Ctrl+Y 恢復
Ctrl+A 全選
Ctrl+F 鍵查找對話框啟動
Ctrl+H 查找/替換對話框
Ctrl+D 復制並粘貼當行
Ctrl+F2 切換書簽
F2 轉到下一個書簽Shift+F2 轉到上一個書簽
F11 全屏模式
前端 :
visual studio code
後端:
pycharm
IDEA
安卓:
android studio
瀏覽器:
谷歌
火狐
資料庫管理:
navicat
遠端鏈接:
fileZilla
xshell
electerm(mac上使用)
流程圖設計:
xmind
processOn
筆記:
為知筆記(付費一年60)
有道雲筆記
虛擬機(容器)
VMware Fusion(mac上)
docker
其他:
postman
jmeter
作為一個12年開發經驗的前端程序員,我來聊聊每天必用的幾個軟體。
寫代碼自然離不開 編輯器 。目前我主要使用的是微軟的 Visual Studio Code 。VS Code比較輕量,功能足夠應付日常開發所需,跨平台,而且完全免費 。因為之前長期使用Visual Studio在Windows平台上做開發,後來技術棧變化,經常需要在Linux和MacOS上做開發,VS Code就成了我順理成章的選擇。後來乾脆在Windows上也用VS Code了。目前整個團隊都已經被VS Code圈粉了。其它類似的如Sublime Text(需要付費)和Atom也有不少人使用。
因為是團隊開發, 源代碼管理工具 自然必不可少,而 git 是目前最熱門的一個。我們公司也不例外,幾年前從Perforce遷移到了 GitHub企業版 (和公眾版本UI完全相同)。平時的代碼審查也都是在GitHub企業版上完成的,不再使用單獨的代碼審查工具。有些不習慣使用命令行方式的同事使用 SourceTree 完成日常的代碼分支管理和提交,而我則比較熱衷於命令行方式。VS Code也提供了比較完善的git集成,但因為習慣的原因,除了直觀比較不同代碼版本的差異,我一般也不用VS Code執行git操作。
作為一個Web前端, 瀏覽器及前端調試工具 自然不可或缺, Google Chrome + Developer Tools (F12) 自然是首選。使用Developer Tools,可以對JavaScript進行調試,監控HTTP請求/響應,分析CSS計算問題和JS性能問題。 Chrome下還有很多功能強大的插件,個人比較常用的包括React Developer Tools、PostMan、Proxy SwitchOmega和AdBlock。當然,因為經常面對瀏覽器兼容性問題,Firefox、IE、Edge、Apple Safari以及各自的Developer Tools都是免不了要用的。
團隊目前使用Scrum模型,自然需要一個做 任務規劃和質量管理 的工具。我們採用了 JIRA , 每天的站會(daily stanp meeting)都會對scrum看板(board)進行更新。
遇到技術問題,自然免不了要上網查找資料。 Google 的使用頻率非常高(需要科學上網)。大部分問題都能在 StackOveflow 上找到線索,但有時候也不得不跑到大名鼎鼎的同性交友網站 GitHub 上看源碼。 MDN (Mozilla Developer Network)對於前端開發也是不可或缺(此處鄙視一下w3cschool,上面到處是錯誤知識)。
其它如node.js/npm、docker等,因為和具體的技術棧相關,就不具體展開講了。
作為一個開發人員,你每天使用什麼軟體呢,歡迎說說看。
盡管我是後端出身的,不過也經常寫前端代碼,甚至還用C#/C++參與過一些客戶端開發,自認為也算是一個Web全棧工程師。隨著前端技術的不斷進步,現在的前端已經不再是寫寫頁面這么簡單了,很多邏輯在前端就寫了,我建議每一個出色的開發者應該盡可能對前後端都能有不錯的掌握。
今天給大家推薦一些我認為前端和後端開發都需要經常用到的一些軟體,這裡麵包括了查詢資料工具、原型工具、文本編輯器、版本管理工具。
原型工具 不管前端還是後端,尤其是前端程序員,在跟產品經歷溝通之後肯定會要查看原型的,方便自己在開發過程中使用,基本上大公司輸出的原型都比較規范,除非你遇到張小龍這種級別的大神,哥們兒直接盯著你做了。
目前主流的原型工具主要有Axure、MockPlus、墨刀等,其中Axure依然是應用最為廣泛的原型工具,大多數開發者也都應該用來看原型。
文本編輯器 不管是前端還是後端程序員,當然前端程序員就不說了,在WebStorm出現之前,沒有一款真正可以叫做IDE的前端開發工具,那麼基本上文本編輯器就是前端程序員最重要的編程工具。同樣後端程序員即使不需要寫前端代碼,文本編輯器也是必備的,您不需要每次看代碼都打開龐大的集成開發環境,像IDEA這種比較耗費資源的,平時查看代碼啥的完全沒有必要,何況你還經常要看一些前端代碼。
當然你比較習慣Linux/Unix下開發,Emacs/Vim可能是你用得比較多的文本編輯器,還有UltraEdit、Sublime Text、EditPlus、Atom這些老牌的文本編輯器,不過現在我覺得每個程序員都應該下載一個Visual Studio Code,支持的語言比較多,而且插件非常豐富,是微軟官方支持的開發者工具,開源免費而且顏值非常高。
查詢資料、版本管理工具不用多說,每個程序員都要學會很好的使用Google、Stack Overflow兩個工具,可以說你日常開發當中可能遇到的問題,通過這兩個工具你全都能找到解決方案。
另外一個是Dash文檔管理工具,Dash是一個非常好的開發者幫助文檔工具,這個工具的好處是給所有的開發文檔做了一個整合,C/C++、Java、PHP、Python、Latex、Emacs Lisp、Haskell、JavaScript、Go語言等文檔都能夠在這個工具當中下載使用。
最後一個就是版本管理了,SVN和Git依然是目前使用最為廣泛的版本管理工具,不過就使用來說我還是推薦Git版本控制系統,可以說這個時代Git就是最好的版本管理工具了,尤其是開源時代、互聯網時代,Git已經成為了最重要的版本管理工具,不管是命令行管理還是使用Github等客戶端工具,堪稱完美。
入行十一年,現在主要做一些管理和架構方面的工作,也會做一些Coding,主要是一些新技術的研究和「踩坑」。
編輯器首先是EditPlus,這是一個文本編輯器。最常用的兩個功能:正則表達式查詢和文件夾內所有文件內容搜索。
平時經常需要看一些系統日誌,甚至要從好幾天幾十個日誌文件中找到內容,這個軟體很好用。(原諒我們沒有上日誌平台)
然後就是IDE啦,我還是喜歡用Eclipse,有時候會用STS(Spring Tool Suite),它也是一個被包裝過的Eclipse,方便做一些Spring框架的研究。
一個是DbVisualizer,凡是具有JDBC資料庫介面的資料庫都可以管理,什麼資料庫都能連。
還有一個是SQLyog,這是一個快速而簡潔的圖形化管理MYSQL資料庫的工具,我只用裡面一個功能,就是數據的導入導出,效率非常高!
大部分項目只對外提供介面服務,所以介面測試工具少不了,我一般使用SoapUI,WebService/Rest都可以進行測試。
每天肯定會用的肯定不止上面幾個,還有版本控制工具svn和git,都會用到是因為單位svn現在開始往git遷移。
因為用的Scrum敏捷開發流程,所以JIRA、Sonar、Fisheye這些也是都會用到的。
Maven也不用說了,幾個項目基本都是基於Maven構建的。
必用的基本就是這些,只要電腦開著,這幾個軟體基本都是打開狀態。
F. 程序員怎麼去提升自己能力
二:信息採集器和筆記本
首先你要給自己設定一個目標,就如同一個公司會設定它的Vision。
目標要夠大,這樣你才能看到更多的風景。
目標應該設定在解決哪一類問題,而不是精通哪一類技術。技術只是手段,不是目的。
例如,「我要成為iOS developer中的達人」這個目標,就遠不如「我要成為前端應用開發的專家」來得有意義。前者學到深處你可能會去鑽研iOS framework里各種奇技淫巧,而後者你會開始關注視覺與交互設計,研究各平台間的差異與共同趨勢。顯然,後者更有助於你的個人發展。
不過即便有了明確的目標,選擇哪一類技術學習,如何學習,在信息過載的今天依然是一個難題。常有的觀點是應該學習最新的技術,因為老的已經過時,而反對的觀點則是新技術還不成熟。我個人的觀點是,當初入一個領域時,選擇主流技術框架;當你有一定經驗後,選擇技術時更應該關注背後的推動者,我相信優秀的人和團隊總能打造優秀的產品,無論是商業公司還是開源社區。不必太在意技術的新舊,因為可能很快都會成為過去時。你真正要學習的是技術背後的思想。有不少語言與開源項目會寫它的Coding philosophy,這是很有意思的,你可以從它們的源代碼中去驗證這些編程理念。以Python為例,如果你執行import this就會看到它的理念,再如Python中一個著名的開源庫Celery,在它的文檔有專門一節講述它的編程理念。它們對你的影響會比這些技術本身來得更深遠,這是我給初學者們的一個忠告。
同理,我非常推薦讀一些優秀開源庫或是語言的源代碼,例如Python的標准庫絕大部分都是用Python實現的,而且可讀性非常好。如果學習一門技術僅僅停留在用的層面上,你就還沒有完全吸取其中的精華,而且學習的收益會隨著技術的過時而消失。
我的另一個學習原則是,在選擇學習一門新技術時,最大化它與你現有知識庫的差異性。讀起來可能有拗口,例如你會Django,接下去你應該去學習Ruby on Rails還是NodeJS?依據這個原則,你應該學NodeJS,因為它的非同步IO模型在理念上與Django的同步模型差異很大,而RoR則與Django更多相似之處。但更好的選擇是不要去學另一個Web framework,去學習ZeroMQ或是Redis,這兩者對於Web development也非常有幫助,這樣就做到了最大化差異。從構建一個程序員的技術理念角度,我會推薦每一個程序至少去了解Lisp或是一門Functional programming language,不管你是否會在可見的未來用到,它們能讓你從一個不同的角度看待編程。
最後我建議每個程序員都應該經營一款自己的產品,它可以是一款app,一個網站或是一個開源軟體。除非你是一個創業公司的早期員工,不然你可能沒有機會將所有學到的技術或是理念都付之實踐,有很多人想成為全棧工程師,最快的捷徑就是打造一款自己的產品。任何一個設計師都會精心打造自己的Portfolio,但大部分程序員卻不會。當評估一個程序員的Coding能力時,我會去看他的Github上是否有出彩的項目,可惜國內絕大部分程序員的Github空空如也,或者只有一些非常簡單的程序。我建議大家好好經營自己Github上項目,這不但可以提高你的聲譽,對你將來的求職也非常有幫助。當你報怨求職面試時又被問到各種無厘頭的程序題時,有沒有想過面試官也很無奈,因為他沒有任何其他方法得知你的Coding能力究竟如何。如果每一個程序員都有自己的作品,我想程序員的面試會簡單許多。
重視溝通能力的培養
當被問到「你覺得Junior Developer和Senior Developer最大的差別是什麼」時,我最自然的反應是溝通與文檔。溝通包括程序員團隊內部的溝通,與其他團隊的溝通,與Manager的溝通等等。我不認為自己有能力把這些問題非常概括地說清楚,不過我可以給一條建議,那就是先學會和你的Manager溝通,讓他來教你其餘的部分。許多公司都會設置Manager與組員的1:1,一個有效率的1:1應該大部分時間有組員來主導。這需要你在1:1之前花足夠多的時間來考慮要問的問題,並且最好提前1天發給Manager,讓他有機會思考答案。許多人對此不太重視,或者只問非常具體的問題而不是一些開放性問題,這樣你很難在你的Manager身上學到東西。如果你漸漸懂得如何利用1:1的時間,它很會成為你在工作中單位時間投資回報率最高的活動。
累積你的人脈
每個人都明白人脈的重要性,但實際做起來卻不容易。參加一些線下的會議或是活動,可能是最直接的擴展人脈的方式之一。可惜大部分人似乎只是去聽了一場技術講座就回家了。當然,這和不少活動的時間安排也有關系,講座時間排得太滿,茶歇時間短,加上有時嘉賓遲到或是沒控制好時間,乾脆就把茶歇取消了。而實際上,結識一兩個同道中人遠比聽技術講座有價值。下次去參加這類會議,不妨給你自己設個目標,比如至少加兩個同行的微信。之後維系你的人脈可能需要花更多的時間,下了班或是周末找你的朋友們喝個咖啡吧?
另外我覺得每個人都需要一個職場導師,他可以是你第一份工作的導師或是Manager,也可以是你認識的其他前輩。你們需要維系一個非常長期的關系,不止於一家公司,最好貫穿你的整個職業生涯。每當你遇到疑惑時,都可以詢求他的建議,我覺得這將是你最寶貴的一筆人脈財富。
尋找發揮你才華的平台
最後也是最重要的一步,找到適合你的公司。做為求職者評估一家公司可以看三個方面:
公司的發展前景(大公司的話,看所在部門的發展前景)
你將要加入的團隊
薪資福利
所以在面試一家公司的時候,你要意識到面試是雙向的,公司在面試你的同時,你也在面試這家公司。面試前你應該對這家公司做足功課,准備好一些有質量的問題,比如指出產品中的問題,詢問開發流程或是如何做績效評估。到時你也可以檢驗一下你的面試官是否合格。
每次選擇公司對以上三個方面都應兼顧,但在職業生涯的不同階段,側重點不同。比如,在剛剛工作時,加入一個優秀的團隊最為重要,他們可以教會你很多東西,提升你的能力。工作5年之後,你需要一個平台施展你的才華,體現個人價值,公司發展前景的重要性迅速提升。當你做出一番成績,證明了自己的價值之後,逐漸進入收獲期,就有了與公司要價的資格。另一方面,團隊實力對公司的前景也有很大的影響。
對一個剛畢業,初入職場的同學,一個近幾年被問了無數次的問題「我的第一份工作是去創業公司還是大公司?」我的回答仍舊是「加入一個優秀的團隊最為重要」。一些知名的大公司,團隊的素質是有一定保證,但創業公司則不然,團隊素質參差不齊,所以如我前面所說你需要面試這個團隊,做出自己的判斷。不過除了團隊因素之外,我想提一下畢業生去創業公司的幾個好處。
首先,在剛畢業的一段時間內,經濟壓力小,是最自由最能承受風險的時期,而這段時間往往不長,所以應把握好這個去創業公司的黃金時段。其次,所有的學生進入大公司後,都會擔任初級職位,某種程度上來講是學校學習的延續,規范有條理,但缺乏獨立性和創新性,而這正是中國大部分學生所欠缺的。這方面的能力在一家創業公司可以得到快速鍛煉,而在大公司可能要等升到中級職位後才有這方面的機會。個人觀點,僅供參考。
小結
我覺得步入職場的前3年對今後的發展尤其重要,希望此文能對年輕的程序員們有所幫助。歡迎評論?
如果想私信我的朋友可以加群,大家一起學習,一起學術分享,資料共享