軟件開發者最重要的四大技能

摘要:現如今,可供選擇的技術、語言及平臺可謂五花八門,因此要弄明白哪里是花時間訓練的最佳投資點也就難上加難……

現如今,可供選擇的技術、語言及平臺可謂五花八門,因此作為軟件開發者,要弄明白哪里是花時間培養個人技能的最佳投資點也就難上加難。常常有人向我征求關于如何成為更強的程序員的建議。人們問得最頻繁的問題可謂萬變不離其宗,即他們是否應該把時間花在某種與眾不同的特定編程語言或技術上。

最近我花了很多心思琢磨此問題,并想出了一些我認為最要緊且能讓你受益終生的技能,一旦軟件開發者掌握了這些技能,不僅會給他們帶來最佳的工作機會,還會使他們變得卓有成效。

技能一:解決問題(Solving Problems)

以前我曾談到需要學會如何解決問題,甚至給出了如何學會解決問題的若干步驟,因為我認為這種技能對任何軟件開發者都是至關重要的。軟件開發百分之百就是解決問題。

若毫無問題,就無需軟件。

所有軟件都被設計用于解決某些用戶問題,而通用解決方案就是由許多能搞定的小規模問題所組成的陣列。要是你不能解決問題,就不會精通軟件開發,而你所用的編程語言或技術也就無所謂了。在解決問題時,大多數開發者的表現簡直糟糕透頂。

我常常會聽到一些關于求職面試太難的抱怨,因為面試官會要求開發者去解決有一定難度的問題。我談過為何有難度的面試挺好,而其中的部分原因在于,面試官就是要測試開發者解決問題的能力。我知道,許多開發者仍然不同意我對此問題的觀點,而且他們也不明白像TopCoder[2]那樣的網站為何要不遺余力地完善其開發技能,至少從我的親身經歷來看,那正是TopCoder解決問題的實踐活動,而參與此類實踐活動正是我職業生涯的轉折點。

假想你是木匠。要想成為出色的木匠,也許你應該擅長切削木材。也許你應該親手做過各種各樣的部件,同時也用過許多不同的工具切削木材。

無論你的木工經驗有多少年,抑或設計出的家具或櫥柜有多漂亮,每次你也要想方設法切削木材,努力做出各個部件。切削木材是木工活的基礎技能,就像解決問題是軟件開發的基礎技能一樣。

技能二:自學(Teaching Yourself)

在生活中,可能沒有比學會學習更重要的技能了。此種技能在軟件開發中尤其重要,因為據我所知,任何領域的變化速度都超不過軟件開發。你不可能無所不知、無所不曉。甚至你都來不及投入時間去成為某一特定框架或技術的大師——因為事物發展得太快了!反而,你需要這樣的能力,即為完成手頭任務而快速獲取所需知識的能力。

要是你真想具備某種能讓你在軟件開發職業生涯中始終與時俱進的技能,那就學習如何自學吧。

提高此種技能的唯一方法就是付諸實踐。走出去學習新的編程語言或技術,即使你認為決不會用得上它(也不妨學一下)。將來你會驚訝地發現,你竟然可以很快地把它撿起來,因為你早就對相關基礎知識一清二楚了。要是你能迅速適應日新月異的軟件開發市場、以及與之相關的各種技術和平臺,你就會擁有那些總是很搶手的技能。

盡管我對蒂姆·費里斯(Tim Ferris)的某些主張有點兒懷疑,不過他寫了本很棒的書,名為《4小時變身廚師》(4-Hour Chef),其中介紹了若干如何快速學習事物的絕招。(我那時也正打算寫本與此主題有關的書。)

技能三:命名(Naming)

要是有人問起我成天在做什么,那我八成會說“研讀其他人命名的事物,以及給事物命名。”誠然,若沒人真那么問,我也不會真這么答,不過我的確有可能這么答哦。

軟件開發就是在描述形而上學的內容。我們所構建的大多數內容都是看不見摸不著的。授權經理收到授權請求,然后發出授權響應,與此同時,用戶資源庫會調用用戶工廠去組建新用戶——我們必須根據以上描述在心中去構建起完整的環境。

每次你編碼時,就是在給事物命名。當閱讀自己或他人所寫的代碼時,你會從代碼中的事物名稱獲得對代碼的大部分理解。通過在開發者親手編寫的代碼中查看方法、變量及類的命名方式,大多數情況下,我能準確預測出開發者的技能水平。要給代碼中的概念及數據起合適的名字,而缺乏此能力的開發者就像個啞巴翻譯。無論你能否明白某事,要是你不能妥善地解釋它,那么此事會轉瞬即逝。

提高此種技能的最佳方式就是不斷實踐。只要我在讀代碼時有所領悟,我往往會重命名代碼中的事物。由于我開始明白某個方法到底在做什么,因此我會給方法改名,以便與我的理解相一致。在讀代碼時我會做這么做,即便代碼沒有產生任何邏輯變化,也照樣會這么做。

你越關注給事物起合適的名字,你就會越擅長此道。這也是你代碼中最顯而易見的一面。簡單看一眼你的代碼,很難分辨代碼正確與否或效率高低,但如果代碼能讓我一望而知,那么我會認為你知道自己在做什么。

技能四:待人接物(Dealing with People)

盡管我把此種技能排在最后,不過在許多情況下,你可能會說它是首要的或最要緊的技能。所到之處皆有人。除非你單獨工作,且只為你自己開發軟件,否則,作為軟件開發者,其他人就會影響到你的職業生涯。我以前談過為何你可能不想批評某人,不過我們更多地是與他人打交道,而不是惹人煩。我總是會重新捧起戴爾·卡耐基(Dale Carnegie)的那本名著《人性的弱點》(How to Win Friends and Influence People),因為這本書對于學習如何做一名成功人士是如此重要。我以前說過,倘若你想提高人們的技能,那就閱讀此書吧!

基本問題是,人類不是合乎邏輯的生物,我們是情感生物。當然,我們喜歡為我們的推理能力而自豪,不過實際情況是,我們所做的大多數決策更多地受到情緒影響,而非理智。

作為軟件開發者,此種技能對你的意義在于,除非你能妥善地處理與其他開發者、經理、甚至客戶的關系,否則,即便你有許多好點子或很有用的技能,你還是會四處碰壁。一般說來,積極參與到軟件開發社區中去也會對你的職業生涯有很大幫助。不要僅限于人際交流,而要把你的名字傳播出去,并廣結善緣。成功做到這一切直接取決于你待人接物的能力。(在學習如何待人接物時想走捷徑?那很簡單。請與人為善!)

怎樣看待實用技能?

請注意,在我的列表中并未包括任何特定技術,甚至連Web開發或移動開發這樣寬泛的技能也沒有,這是何原因?在一些技術領域具有堅實的基礎的確很重要,不過這些領域都不及我上面提到的這4種技能重要。要是你能夠解決問題、快速學習事物、恰當命名事物、以及待人接物,那么與你專門從事任何特定技術相比,從長遠來看,你將會取得更大的成功。

有這樣一種說法,要深入學習一到兩門編程語言,并從事某個通用的專業領域,這當然很重要,不過,只要你還沒帶著那些抉擇在這條老路上走得太遠,并把精力集中在提高這4種重要技能上,你自會萬事大吉!(你甚至可以學習C++)

譯文出自:圖靈社區(譯者/高翌翔)

英文出自:Simpleprogrammer

作者簡介:

約翰·森梅茲(John Sonmez)是Pluralsight網站的課程作者,他創作了超過25門課程,內容涵蓋了從移動開發到控制反轉容器的廣泛主題。他還是諸如DotNetRocks和Hanselminutes等播客網站的常客。約翰已經使用各種原生工具分別為iOS、Android、Windows Phone 7創建了應用程序,他還為HTML5及幾乎所有目前可用的跨平臺解決方案創建了應用程序。他不僅熱衷于敏捷開發,而且他正忙于一場個人改革運動,以便化繁為簡。

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

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

相關文章

數據缺失的補充與修改

1查看數據情況 df.shape df.info() 2.用指定值填充 df df.fillna(x) 3.判斷是否缺失 df.isnull() 4.刪除缺失數據 df df.dropna() 5.補充平均值 df df.fillna(df.mean()) 6.填充他前面一個元素值(ffill向前填充,bfill向后填充)(limit:可以…

其他-私人♂收藏(比賽記錄 Mar, 2019)

OwO 03.03 [USACO19JAN] A. Redistricting 題意:給 \(g\) ,求 \(f(n)\) 。 \(f(i)f(j)[g(i)\ge g(j)],j \in (i-k,i]\) 。 離散化之后線段樹優化 DP ;或者發現額外貢獻最多只有 \(1\) ,單調隊列。 B. Exercise Route 題意&#xf…

JSR 303 - Bean Validation 簡介及使用方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、JSR-303簡介 JSR-303 是 JAVA EE 6 中的一項子規范,叫做 Bean Validation,官方參考實現是Hibernate Valida…

POJ 3683 Priest John's Busiest Day(2-ST)

題目鏈接:http://poj.org/problem?id3683 題意:有n個婚禮要舉行,但是只有一個牧師。第i個婚禮使用牧師的時間長為leni,可以在開始時或結束時使用。問能否使得n個婚禮均舉行? 思路:對于婚禮i,i*2-1表示在開…

12個git實戰建議和技巧

摘要:git無疑是現在最熱門的版本控制工具,而且正在進一步侵占SVN以及CVS的市場。本文作者從國外技術問答社區Stack Overflow整理的12個很實用的git使用技巧和建議,希望對你有幫助。 1.使用“git diff”來折疊多行 用git diff經常會出現很多內…

python讀寫json和txt

讀寫json #數據保存如json文件 import json jsObj json.dumps(code_sec) fileObject open(jsonFile.json, w) fileObject.write(jsObj) fileObject.close() #讀取json文件 # 將類文件對象中的JSON字符串直接轉換成 Python 字典 with open(jsonFile.json, r, encoding…

Java 12 將于3月19日發布,8 個最終 JEP 一覽

開發四年只會寫業務代碼,分布式高并發都不會還做程序員? JDK 12 已于2018年12月進入 Rampdown Phase One 階段,這意味著該版本所有新的功能特性被凍結,不會再加入更多的 JEP 。該階段將持續一個月,主要修復 P1-P3 級…

股票期貨數據的resample處理

? import pandas as pd stock_day pd.read_csv("stock_day.csv") stock_day stock_day.sort_index() # 對每日交易數據進行重采樣 (頻率轉換) stock_day.index# 1、必須將時間索引類型轉換成Pandas默認的類型 stock_day.index pd.to_datet…

ArcEngine調用FeatureToLine工具傳參問題

FeatureToLine工具的in_features參數不能為內存圖層,否則會報內存錯誤,正確的寫法如下: FeatureToLine ftrToLine new FeatureToLine(); ftrToLine.in_features cpj.TempWs.PathName "\OriginDataset\" currentFc.Key; ftrToLi…

程序員如何做出“不難看”的設計

摘要:程序員在寫代碼的時候往往只注重功能的實現和性能的提升,忽視了外觀和易用性,其實很多時候只要注意一些基本的規則,就可以大幅度提高產品的觀感。 經常看到程序員展示自己做的東西,有一些是創業項目,有…

微服務實戰(二):使用API Gateway

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 當你決定將應用作為一組微服務時,需要決定應用客戶端如何與微服務交互。在單體式程序中,通常只有一組冗余的或者…

sql數據庫挖坑

sql數據庫存入數據時,因為列 名不允許有括號,無法識別,需要對括號進行剔除 df df.rename(columnslambda x: x.replace("(","").replace(),))

力扣——頂端迭代器

給定一個迭代器類的接口,接口包含兩個方法: next() 和 hasNext()。設計并實現一個支持 peek() 操作的頂端迭代器 -- 其本質就是把原本應由 next() 方法返回的元素 peek() 出來。 示例: 假設迭代器被初始化為列表 [1,2,3]。調用 next() 返回 1&#xff0c…

五步讓你成為專家級程序員

摘要:Mark Lassoff是一位高級技術培訓師,從事培訓工作已有10余年。他培訓的客戶包括美國國防部、Lockheed Martin等。在多年的培訓生涯中,他總結了一些如何快速學習一門語言的技巧,這些技巧非常簡單,但是卻讓人受益匪淺…

Ionic混合移動app框架學習

第一章 緒論創建移動app有三種安卓原生App,使用java語言,目前推薦kotlin語言,開發工具Android studioIOS原生App,使用Objective-C或者Swift語言,開發工具Xcode混合移動App,使用web通用語言(HTML…

IPC 中 LPC、RPC 的區別和聯系

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 進程間通信(IPC,Inter-Process Communication),指至少兩個進程或線程間傳送數據或信號的…

Laravel 使用 Aliyun OSS 云存儲

對象存儲 ( Object Storage Service, 簡稱 OSS ) OSS 相信大家都聽過, 它是阿里云對外提供的海量, 安全和高可靠的云存儲服務. 大家可以把自己網站的資源存上面加快自己網站速度, aliyun 官網也有文檔不過對于新手來說有點難, 那么這里我給大家推薦一個組件和組件的使用. johnl…

python多級索引修改

創建多級索引 cols pd.MultiIndex.from_tuples([("a","b"), ("a","c")]) pd.DataFrame([[1,2], [3,4]], columnscols) abc012134 df.columns df.columns.droplevel() df bc012134

在線學習新編程 技巧全攻略

摘要:有句俗語叫:“技多不壓身”,如果你有時間和興趣,不妨多了解和掌握編程技能,或許隨時可能有用。本文為你收集了一些編程技巧,讓你輕松學編程。 有句俗語叫:“技多不壓身”,如果你…

第 3 章 鏡像 - 018 - 鏡像命名的最佳實踐

為鏡像命名 創建鏡像時 docker build 命令時已經為鏡像取了個名字,例如: docker build -t ubuntu-with-vi 這里的 ubuntu-with-vi 就是鏡像的名字。通過 dock images 可以查看鏡像的信息。 1 rootubuntu:~# docker images ubuntu-with-vi 2 REPOSITORY …