#
WebSocket是一種比HTTP協議更加高效的網絡傳輸協議,它有效地減少了HTTP頭中的冗余信息和網絡延時,能夠提供客戶端-服務器和服務器-客戶端的雙通道實時通信,同時具有很好的安全機制。基于WebSocket的URL通常以WS://...開頭,類似于HTTPS,安全的WebSocket連接URL通常以WSS://...開頭。要實現WebSocket通信,需要客戶端瀏覽器支持WebSocket,服務器端也必須支持WebSocket。
WebSocket還具有廣播功能,當有多個監聽者連接時,廣播服務器發送的消息都可被接收到。
2.瀏覽器支持檢測
function loadDemo()
{
if (window.WebSocket)
{
document.getElementById("support").innerHTML = "HTML5 WebSocket is supported in your browser.";
} else
{
document.getElementById("support").innerHTML = "HTML5 WebSocket is not supported in your browser.";
}
}
3.WebSocket對象
WebSocket在DOM中是window對象的子對象,它具有:
•WebSocket(url)構造函數。
•readyState。只讀屬性,其值可以是CONNECTING(0),OPEN(1),CLOSED(3)。
•boolean send(in DOMString data)和void close()兩個方法,分別用于發送消息和關閉WebSocket連接
•onopen, onmessage, 和onclosee三個事件屬性,分別對open, message和close三個WebSocket事件。
3.使用WebSocket的步驟
//建立連接
url = "ws://localhost:8080/echo";
w = new WebSocket(url);
//事件監聽
w.onopen = function() {
log("open"); w.send("thank you for accepting this websocket request");
}
w.onmessage = function(e) {
log(e.data);
}
w.onclose = function(e) {
log("closed");
}
//發送消息
document.getElementById("sendButton").onclick = function() {
w.send(document.getElementById("inputMessage").value);
}
//關閉連接。一般情況下不關閉,以保持實時通信
w.close();
在HTML5的Canvas上繪制橢圓的幾種方法
概述
HTML5中的Canvas并沒有直接提供繪制橢圓的方法,下面是對幾種繪制方法的總結。各種方法各有優缺,視情況選用。各方法的參數相同:
context為Canvas的2D繪圖環境對象,
x為橢圓中心橫坐標,
y為橢圓中心縱坐標,
a為橢圓橫半軸長,
b為橢圓縱半軸長。
參數方程法
該方法利用橢圓的參數方程來繪制橢圓
//-----------用參數方程繪制橢圓---------------------
//函數的參數x,y為橢圓中心;a,b分別為橢圓橫半軸、
//縱半軸長度,不可同時為0
//該方法的缺點是,當lineWidth較寬,橢圓較扁時
//橢圓內部長軸端較為尖銳,不平滑,效率較低
function ParamEllipse(context, x, y, a, b)
{
//max是等于1除以長軸值a和b中的較大者
//i每次循環增加1/max,表示度數的增加
//這樣可以使得每次循環所繪制的路徑(弧線)接近1像素
var step = (a > b) ? 1 / a : 1 / b;
context.beginPath();
context.moveTo(x + a, y); //從橢圓的左端點開始繪制
for (var i = 0; i < 2 * Math.PI; i += step)
{
//參數方程為x = a * cos(i), y = b * sin(i),
//參數為i,表示度數(弧度)
context.lineTo(x + a * Math.cos(i), y + b * Math.sin(i));
}
context.closePath();
context.stroke();
};
均勻壓縮法
這種方法利用了數學中的均勻壓縮原理將圓進行均勻壓縮為橢圓,理論上為能夠得到標準的橢圓.下面的代碼會出現線寬不一致的問題,解決辦法看5樓simonleung的評論。
//------------均勻壓縮法繪制橢圓--------------------
//其方法是用arc方法繪制圓,結合scale進行
//橫軸或縱軸方向縮放(均勻壓縮)
//這種方法繪制的橢圓的邊離長軸端越近越粗,長軸端點的線寬是正常值
//邊離短軸越近、橢圓越扁越細,甚至產生間斷,這是scale導致的結果
//這種缺點某些時候是優點,比如在表現環的立體效果(行星光環)時
//對于參數a或b為0的情況,這種方法不適用
function EvenCompEllipse(context, x, y, a, b)
{
context.save();
//選擇a、b中的較大者作為arc方法的半徑參數
var r = (a > b) ? a : b;
var ratioX = a / r; //橫軸縮放比率
var ratioY = b / r; //縱軸縮放比率
context.scale(ratioX, ratioY); //進行縮放(均勻壓縮)
context.beginPath();
//從橢圓的左端點開始逆時針繪制
context.moveTo((x + a) / ratioX, y / ratioY);
context.arc(x / ratioX, y / ratioY, r, 0, 2 * Math.PI);
context.closePath();
context.stroke();
context.restore();
};
三次貝塞爾曲線法一
三次貝塞爾曲線繪制橢圓在實際繪制時是一種近似,在理論上也是一種近似。 但因為其效率較高,在計算機矢量圖形學中,常用于繪制橢圓,但是具體的理論我不是很清楚。 近似程度在于兩個控制點位置的選取。這種方法的控制點位置是我自己試驗得出,精度還可以.
//---------使用三次貝塞爾曲線模擬橢圓1---------------------
//此方法也會產生當lineWidth較寬,橢圓較扁時,
//長軸端較尖銳,不平滑的現象
function BezierEllipse1(context, x, y, a, b)
{
//關鍵是bezierCurveTo中兩個控制點的設置
//0.5和0.6是兩個關鍵系數(在本函數中為試驗而得)
var ox = 0.5 * a,
oy = 0.6 * b;
context.save();
context.translate(x, y);
context.beginPath();
//從橢圓縱軸下端開始逆時針方向繪制
context.moveTo(0, b);
context.bezierCurveTo(ox, b, a, oy, a, 0);
context.bezierCurveTo(a, -oy, ox, -b, 0, -b);
context.bezierCurveTo(-ox, -b, -a, -oy, -a, 0);
context.bezierCurveTo(-a, oy, -ox, b, 0, b);
context.closePath();
context.stroke();
context.restore();
};
三次貝塞爾曲線法二
這種方法是從StackOverFlow中一個帖子的回復中改變而來,精度較高,也是通常用來繪制橢圓的方法.
//---------使用三次貝塞爾曲線模擬橢圓2---------------------
//此方法也會產生當lineWidth較寬,橢圓較扁時
//,長軸端較尖銳,不平滑的現象
//這種方法比前一個貝塞爾方法精確度高,但效率稍差
function BezierEllipse2(ctx, x, y, a, b)
{
var k = .5522848,
ox = a * k, // 水平控制點偏移量
oy = b * k; // 垂直控制點偏移量
ctx.beginPath();
//從橢圓的左端點開始順時針繪制四條三次貝塞爾曲線
ctx.moveTo(x - a, y);
ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
ctx.closePath();
ctx.stroke();
};
光柵法
這種方法可以根據Canvas能夠操作像素的特點,利用圖形學中的基本算法來繪制橢圓。 例如中點畫橢圓算法等。
其中一個例子是園友“豆豆狗”的一篇博文“HTML5 Canvas 提高班(一) —— 光柵圖形學(1)中點畫圓算法”。這種方法由于比較“原始”,靈活性大,效率高,精度高,但要想實現一個有使用價值的繪制橢圓的函數,比較復雜。比如,要當線寬改變時,算法就復雜一些。雖然是畫圓的算法,但畫橢圓的算法與之類似,可以參考下。
總結
基本上所有的方法都不可能達到100%精確,因為受顯示器分辨率的限制。
其實最好的方法應該是arc()+scale()。canvas繪圖庫KineticJS就是用的這種方法。
在其他繪圖軟件中,不像HTML5的canvas那樣提供固有的arc()+scale()方法,通常用貝塞爾曲線模擬近似橢圓,無論是幾條貝塞爾曲線都是近似而已。關于用貝塞爾曲線模擬橢圓,可以參考這份資料:Drawing an elliptical arc using polylines, quadratic or cubic Bezier curves。
由于arc()+scale()是瀏覽器已經實現的方法,理論上精度最高,所以從效率、精確度和簡單易用程度上來講,都是最佳的。
在用arc()+scale()繪制完橢圓后,context.stroke()和 context.restore()兩個方法調用的先后順序不同,產生的結果會很有意思的。通常應該先restore()再stroke()。
Demo
下面是除光柵法之外,幾個繪制橢圓函數的演示,演示代碼如下:
<div id="CanvasWrap" style=" background:#fff; width: 600px; height: 600px; border: 1px solid black;"></div>
<script type="text/javascript">// <![CDATA[
var canvas,
context;
var div = document.getElementById("CanvasWrap");
div.innerHTML = "";
canvas = document.createElement("canvas");
canvas.style.width = "600px"
canvas.style.height = "600px"
canvas.width = 600;
canvas.height = 600;
context = canvas.getContext("2d");
div.appendChild(canvas);
function execDraw()
{
//解決Chrome下的線寬小于等于1的問題
context.lineWidth = 1.1;
context.strokeStyle="black"
ParamEllipse(context, 130, 80, 50, 50); //圓
ParamEllipse(context, 130, 80, 100, 20); //橢圓
EvenCompEllipse(context, 130, 200, 50, 50); //圓
EvenCompEllipse(context, 130, 200, 100, 20); //橢圓
BezierEllipse1(context, 470, 80, 50, 50); //圓
BezierEllipse1(context, 470, 80, 100, 20); //橢圓
BezierEllipse2(context, 470, 200, 50, 50); //圓
BezierEllipse2(context, 470, 200, 100, 20); //橢圓
//檢測相似性(重合的程度)
ParamEllipse(context, 300, 450, 250, 50);
context.strokeStyle = "yellow";
BezierEllipse1(context, 300, 450, 250, 50);
context.strokeStyle = "blue";
BezierEllipse2(context, 300, 450, 250, 50);
};
function clearCavnas()
{
context.clearRect(0, 0, 600, 600);
};
// ]]></script>
<p>
<br />
<button onclick="execDraw();" type="button">執行</button>
<button onclick="clearCanvas();" type="button">清理</button>
</p>
注意,要成功運行代碼,需要支持HTML5的Canvas的瀏覽器。
本文轉載至:http://www.cnblogs.com/shn11160/archive/2012/08/27/2658057.html
客戶端跳轉與服務器端跳轉的區別
客戶端跳轉時用HttPservletResopse對象的sendRedirect函數實現,服務器端跳轉是使用RequestDispather對象的forward方法實現的。這兩者之間的區別主要體現在三個方面:
1. 使用服務器端跳轉時,客戶瀏覽器的地址欄并不會顯示目標地址的URL,而是用客戶端跳轉時,地址欄當中會顯示目標資源的URL;
2. 服務器端跳轉是由客戶端發送一個請求,請求一個服務器資源——如JSP和Servlet——,這個資源又將請求轉到另一個服務器資源,然后再給客戶端發送一個響應,也就是說服務器端跳轉是客戶端發送一次請求,服務器端給出一次響應;
客戶端跳轉的流程則不同。客戶端同樣是發送一個請求給服務器端資源,這個服務器資源會首先給客戶端一個響應,客戶端再根據這個響應當中所包含的地址,再次向服務器端發送一個請求,也就是說客戶端跳轉是兩次請求,兩次響應;
3. 在進行客戶端跳轉和服務器端跳轉時,都需要指定目標資源的URL,如果這個路徑以“/”開始。在客戶端跳轉當中“/”代表的是應用服務器根目錄,而在服務器端跳轉當中代表的是應用程序根目錄。
page = 頁面級別
request = 請求級別(與服務器端跳轉配合使用)
session = 會話級別(客戶端跳轉(服務器端跳轉也可,但是客戶端跳轉更加突出了session的作用范圍))
application = 應用級別
客戶端跳轉:服務器端將請求結果返回給客戶端,客戶端向服務器發出另一次請求。在客戶端跳轉過程中是兩次不同的請求。在地址欄中顯示的是最后一次請求地址。
客戶端跳轉可以進行站外跳轉。
1、鏈接跳轉:<a href=””></a>
2、表單提交
3、Response.sendRedirect(“3.jsp”);
4、<mata http-equiv=”refresh”, content=”3;2.jsp”/>
5、response.setHeader(“refresh”,” 3;2.jsp”);
6、客戶端跳轉“/”代表服務器跟路徑(localhost:8080)
7、客戶端跳轉“.”代表當前工程項目根路徑(http://localhost:8080/addressbook)
服務器端跳轉(容器內跳轉):能夠自動的在服務器內部進行跳轉,這種跳轉對用戶來說是透明的。兩次跳轉時同一個request,在地址欄中顯示的事第一次頁面地址。
只能進行站點內跳轉。
1、<jsp:forward page=””/> --寫在jsp頁面內的跳轉
2、pageContext.forward(); --寫在jsp頁面內的跳轉
3、 request.getRequestDispatcher("1.jsp").forward(request,response);
4、 服務器端跳轉“/”代表當前請求根路徑(http://localhost:8080/addressbooktest/GoServlet)
5、 服務器端跳轉“.”代表當前請求根路徑(http://localhost:8080/addressbooktest/GoServlet)
JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn512m -Xss256K -XX:PermSize=120M -XX:NewSize=512m -XX:MaxNewSize=512m -XX:MaxPermSize=120m -XX:ParallelGCThreads=15 -XX:MaxTenuringThreshold=5 -XX:ParallelCMSThreads=15 -XX:+UseConcMarkSweepGC -XX:+UseCMSCom
包含分頁的JDBC工具類
package com.shxt.tool;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* @Author:何云龍
* @Version:JDBC封裝1.1 2012-11-29 下午06:38:55
* @Description:jdbc的封裝
*/
public class DBUtil {
private String url = "jdbc:mysql://localhost:3306/sduentdb";
private String userName = "root";
private String passWord = "root";
private Connection conn = null;
private Statement st = null;
private PreparedStatement ps = null;
private ResultSet rs=null;
// 加載驅動,只加載一次即可
static {
try {
// System.out.println("加載驅動正在進行");
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加載驅動遇到異常");
e.printStackTrace();
}
}
public Connection getConnection() {
// 創建連接
try {
conn = DriverManager.getConnection(url, userName, passWord);
return conn;
} catch (SQLException e) {
System.out.println("創建連接出現異常!!");
e.printStackTrace();
}
return null;
}
public int update(String sql) {
// row是指受影響的行數
int row = -1;
try {
// 當前連接如果是空或者被關閉,需要重新創建一個連接
if (conn == null || conn.isClosed()) {
conn = getConnection();
}
st = conn.createStatement();
row = st.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally{
//關閉資源
release();
}
return row;
}
public int update(String sql, Object[] obj) {
int row = -1;
// 當前連接如果是空或者被關閉,需要重新創建一個連接
try {
if (conn == null || conn.isClosed()) {
conn = getConnection();
}
ps = conn.prepareStatement(sql);
// 參數結構數據對象
ParameterMetaData pmd = ps.getParameterMetaData();
int varCount = pmd.getParameterCount();
// 給sql語句中的問號?附上值
for (int i = 0; i < varCount; i++) {
ps.setObject(i + 1, obj[i]);
}
row = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//關閉資源
release();
}
return row;
}
public ArrayList<Map<String, Object>> queryToList(String sql) {
ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
// 當前連接如果是空或者被關閉,需要重新創建一個連接
try {
if (conn == null || conn.isClosed()) {
conn = getConnection();
}
st = conn.createStatement();
rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int col = rsmd.getColumnCount();
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= col; i++) {
map.put(rsmd.getColumnName(i),
rs.getObject(rsmd.getColumnName(i)));
}
list.add(map);
}
// System.out.println(list);
return list;
} catch (Exception e) {
e.printStackTrace();
}finally{
//關閉資源
release();
}
return null;
}
public ArrayList<Map<String, Object>> queryToList(String sql,String[] str) {
ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
// 當前連接如果是空或者被關閉,需要重新創建一個連接
try {
if (conn == null || conn.isClosed()) {
conn = getConnection();
}
ps = conn.prepareStatement(sql);
// 參數結構數據對象
ParameterMetaData pmd = ps.getParameterMetaData();
int varCount = pmd.getParameterCount();
// 給sql語句中的問號?附上值
for (int i = 0; i < varCount; i++) {
ps.setString(i + 1, str[i]);
}
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int col = rsmd.getColumnCount();
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= col; i++) {
map.put(rsmd.getColumnName(i),
rs.getObject(rsmd.getColumnName(i)));
}
list.add(map);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}finally{
//關閉資源
release();
}
return null;
}
private int pageSize;//頁容量
private int rowsCount;//總記錄數
private int start;//開始位置
private int end;//結束位置
private int pageNow;//當前頁
public static int pageCount;//總頁數
public ArrayList<Map<String, Object>> getPage(int pageSize,int pageNow,String sql){
rowsCount=queryToList(sql).size();//獲取到總記錄數
pageCount=rowsCount%pageSize==0?rowsCount/pageSize:(rowsCount/pageSize+1);//獲取到總頁數
start=pageNow*pageSize-pageSize;//開始位置
String sqlPage="select * from ("+sql+") as t limit "+start+" , "+pageSize;
ArrayList<Map<String, Object>> list=queryToList(sqlPage);
return list;
}
//關閉資源 釋放資源
public void release(){
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(st!=null){
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
怎么樣在30歲前年薪超過50萬(轉載自網易斬建通)
靳建通有不少朋友發郵件給我,向我請教如何學習.NET,又或者是想拜我為師,長期進行交流學習。很遺憾,由于時間有限,這些郵件我都沒有回復。但我確實想幫一幫這些朋友們,所以我覺得還是寫一篇文章,將我這些年的經歷像講故事一樣告訴大家。如果大家能有所啟發,又或者有所進步,那我也算是聊以慰藉、得償所愿了。靳建通
我是1982年12月8日出生的,靳建通到今年整整30歲了。古人說“三十而立”,我想不論從思想上還是財富上,我應該都算是勉強達到了吧。這篇文章的標題是“如何在30歲前年薪超過30萬”,其實只是一個噱頭罷了,盡管我確實達到了這么多靳建通,但這不是我所在意的,這篇文章主要是談談我的一些歷程而已。
小學、初中(1989~1998)
我從小就很貪玩,雖也稱不上孩子王,但只要涉及娛樂項目(街機、丟沙包、踢毽子、拍洋片、跳大繩),從來不會少了我的身影。在這個階段,靳建通我最感謝的是我的父親和班主任,他們對我管教的非常嚴,挨打、下跪是常有的事,所以學習成績還算保持的不錯。小學畢業時候,年級第2名(共4個班,每個班30多個學生),初中畢業時年級第62名(共11個班,每個班45個學生)。
高中(1998~2001)
我的初中和高中是同一所學校,陜西省西安市黃河中學,在當地算不錯的學校,也就是大人們常念叨的省重點。上了高中以后,我的個頭已經超過了父親,他也不再像從前那樣管教我;而由于班上學生很多,又有一些刺頭,老師也就顧不上關注我了。但我的貪玩卻是一如既往,可能好多人大學時候才接觸電腦,可我高一時候就開始去電腦廳通宵上夜機了(借口是:去某某家學習)。靳建通那時可不是編什么程序,而是打游戲。就這樣,到了高一下學期期末,我在班里排40多名(共50多人),年級150名靠后(共4個班,220多人)。
上了高二以后,我算是有所反省,收斂了一些,在讀書上多花了點心思。靳建通到了高三臨近高考前,我的成績保持在年級30名左右。按照往年的水平,這個名次剛剛夠進西安交通大學。于是,我就報考了這所大學。可能是老天對我的懲罰吧,事后老師告訴我們,我們這一屆是黃河中學近10年來最爛的一屆,所以進入西安交通大學的名次也提升到了年級前20名。于是,我滑到了一所二流學校――西安理工大學。
大學(2001~2005)
至少在那個時候,我還沒有那么高的覺悟,不知道珍惜時間。再加上高中階段的壓抑得以釋放,所以大學四年基本上是放羊式的。一般來說,一門課程我只上兩堂課,第一堂和最后一堂。上第一堂純粹是給老師面子,上最后一堂則是想看看會不會透露一些必考點。省出的時間基本上泡在網吧,又或者是追求某個MM了。于是,大學的掛科幾乎是接連不斷,到了大四下學期還有巨惡心無比的、靳建通從大一補考到大四的《工科化學》沒過。不過,好在最后一次清考過了,順利拿到了畢業證和學位證。
大學實在是沒什么可圈可點之處,我想大多數人可能和我一樣也就這么過來了。讓我感到欣慰和慶幸的是:大學期間我考了駕照,過了四六級,而且六級考了82分。
后大學時代(2005下半年)
大學畢業以后,平時比較努力的同學都找到了工作,好一些的進了華為、中興、靳建通大唐電信等比較有名的公司。像我這樣的,簡歷投出去都是沒音訊的,所以我自然想到了很多人都想到的一招――考研。可我的考研完全是一個笑話:我和一個初高中一起玩大的哥們兒在網吧旁邊的城中村租了一個房間,結結實實打了半年的網游。
我的學生時代就這樣結束了,說了上面這么多,其實想說的意思就一個:我和很多人一樣不肖,甚至更差。但這些都不要緊,只要從現在開始努力,你的人生一樣可以開始轉變。靳建通
西安上半期(2006~2007年中)
我想在大學時代干的還算不錯的一件事就是考過了六級,托它的福,我找到了第一份工作。這家公司是做國際旅游的,面向的是海外的顧客,所有的網站和系統都是英文的。我想可能是之前受過找不到工作的打擊,所以這份工作我很努力。公司是早上8點30上班,我每天7點30之前就到公司開始工作了,并且堅持了一年。這段時間我才開始學習Asp、JavaScript、CSS,那個時候還沒有接觸到太多的.NET。盡管不多,但付出還是有回報的,這一年我的工資上漲了4次,從最初的1800,漲到了2600。
促使我離開這家公司的原因是:我想學習并應用.NET,因為我比較看好它。可這家公司的所有系統都是用ASP做的,并且沒有升級到.NET的打算。于是,我遞交了辭呈。這時,我的薪水是3000塊。靳建通
西安下半期(2007年中~2008年中)
離開之后的一個月,我輾轉了兩家公司,一家是工資太低,只肯出1800;一家是工作環境太差,辦公室簡直就是一個倉庫。于是,我又回到了上一家公司。我的部門經理也還算開明,給我了一個新的項目,并允許我用.NET開發。這個時期是我最困惑和低迷的時候,因為我找不到出路,我不知道該怎樣才能突圍出去,不知道該怎樣才能獲得提升和進步,不知道該怎樣才能讓自己的收入更體面一些。幸運的是,我找到了方法。
這個方法很簡單,和電影《阿甘正傳》里阿甘的做法是一樣的,核心就四個字:專注、執著。既然我決定要用.NET,就把.NET鉆研到至精至強。
實際上,我發現越是真理,就越是趨于簡單,關鍵是,你愿不愿,你能不能這樣去做。所以,當一個人找不到出路的時候,最好的辦法就是將當前能做好的事情做到極致,做到無人能及。靳建通
想通了這個道理以后,我每天6點30起床,每晚1點鐘睡覺,周六周日無休,只要有時間就研究.NET,瀏覽國內外的技術站點,寫范例程序。也是在這段時間,我加入了博客園,寫了不少的博文,其實都是我研究和學習的心得。
到了2008年7月,我仍然覺得這家公司不適合我繼續待下去,原因很簡單:這家公司的老板不值得追隨,賺了錢全是他的,下面的人只要還不至于你離職,能給你開多低的工資,就給你多低的工資。
離開時,我的月薪是3500。
閉關修煉期(2008年下半年)
由于一年多的時間都浸淫在.NET的世界里,還沒有從這種狀態里跳出來,靳建通既然現在辭職了,不如借此機會,繼續深入一下.NET。于是這半年我都待在家里學習.NET。
大學臨近畢業的時候,對于我們計算機專業的學生來說,比較流行“計算機軟件技術水平考試”。分為了程序員、軟件設計師、系統分析師三個等級,在我印象里,全系100多人,只有十幾個考過了軟件設計師,而考過的這些人,多半進了華為中興。
可能是為了證明自己不比別人差,而現在又正好有時間,不如捎帶著也考一個軟件設計師。于是,這段時間除了.NET以外,我又把大學時候丟下的課本拿起來復習了一遍。
四個月后,已在深圳的我收到消息,我已經通過了這門考試。
離開西安(2008年12月底)
選擇去深圳是偶然也是必然。在家里閉關修煉那些天,有一天我心血來潮,查了一個熱門詞匯:GDP,我當時還不知道這玩意兒干嘛的,所以就想了解一下。查過之后,通俗地講,我知道它代表了一個地區或者國家的富裕程度。然后我又查詢了一下國內省會城市的GDP排名,想看看從小長大的西安排名第幾。結果大出所料,西安屬于墊底的,好像是二十五往后去了(總共才排了30多個城市)。
于是,我就強烈地想感受一下排名前幾位的城市是什么樣的,這時我還是孤家寡人一個,此時不闖蕩更待何時。可還有一個問題:北京、上海、廣州、深圳,去哪個?經過一番思考,我決定去深圳。因為:
北京:冷,我雖然是北方人,但我怕冷;北京空氣污染很嚴重;北京交通成本很高。
上海:地區歧視;交通成本也很高。
廣州:都講粵語,不好融入。
深圳:移民城市,大家都是外地的,自由平等;溫暖,海濱城市。
12月23日,我乘上了飛往深圳的班機。
深圳(2009~2011年上半年)
在深圳的三年我都在一家公司,并且以后很長一段時間都會繼續待下去。之所以將深圳的經歷分成兩段來寫,是因為我在這兩段的表現完全是兩個人。
深圳的工作是朋友介紹的,到深圳的頭一個星期我就獲得了這份工作。加入這家公司的時候,公司剛剛成立一年,連我算上也只有9個人。問及我想要多少薪水的時候,我當時認為我在.NET領域已經算不錯了,所以我報了稅后8000塊。老板很慷慨,欣然答應了,稅前8600。
我到這家公司的時候,技術部已經有一位員工了,可能因為他的表現不好,所以老板讓我做了部門經理,當了他的上司。三個月后,我又招聘了一名同事,這樣技術部就有3個人了。
之后整整兩年多的時間里,我一直掉到了一個死胡同里出不來,因為我還和之前一樣,持有技術為王的思想。實際上這個時候我的角色已經變了,我不再是一個人,我有了下屬,我需要和他們做溝通,我需要帶領他們。但這個時候我完全沒有這方面的想法,我只想著只要我技術夠強,只要我可以把我負責的那部分工作做好,我到哪里都能吃得開。我完全是個人英雄的想法,沒有團隊協作的概念。
可是我錯了。到了2011年的時候,我后來招的那位同事已經完全喪失了工作的積極性,士氣低落到每天上班就是混日子,有時候甚至打開優酷看電影。直到最后,老板把他開掉了。而比我來得更早的那位同事,更是不待見我,最后干脆辭職走掉了。這時,我成了名副其實的光桿司令。
他們兩個人離開以后,工作的擔子全壓了過來,我一個人支撐了三個人的工作量,并且堅持了三個月,直到我后來又招了兩位同事。
這三個月里,我除了天天加班做事以外,還不斷反省我究竟錯在了哪里。直到后來,我終于想明白了。這里,我想先講一個故事:楚漢爭霸的時候,劉邦陣營里有一個將領,大家都聽過的,叫做韓信。每次打完仗,劉邦就把那些降兵、老兵、殘兵、弱兵丟給韓信,自己帶領精兵。而這些最沒有戰斗力的士兵,到了韓信手里,不出兩年就全部成了精兵。結果劉邦兩次跟項羽打了敗仗后都去向韓信借兵,有一次,甚至是半夜里溜進韓信的帳營,竊取了韓信的兵權。
這才是真正的將領,這才是真正有本事的領導。領導的能力不在于自己能做多少事,自己能把事情做得有多好,一個人的能力再強,能干兩個人的活,能干三個人的活,但是能抵得過十個人嗎?領導的能力在于能多大程度地發揮下屬的潛能,如何能讓下屬做得更出色,如何能讓所有人戮力同心朝一個方向前進。
想明白了這些事情后,我突然感到很悲傷,我覺得愧對之前的兩位同事。他們本來是可以做得很好的,是因為我這個領導不好,所以才導致了最后這樣的結局。從這個時候起,我也給自己設定了一個規則:如果有哪個下屬表現不好,我不會怪罪他,我知道這一定是我的責任,一定是我沒有訓練好他,一定是一些該說的話沒有說。我要做像韓信那樣的領導,即便是60分的人到了我這里,我也會將他變成80分的人。一個人的強大不是真的強大,整個部門強大、整個公司強大才是真正的強大。
這個時候,我的收入是年薪20萬。
深圳(2011年~現在)
上面可以說是一個轉折點,從那以后,我將自己的工作主要內容定義為:幫助部門同事將工作做得更好、幫助部門同事解決棘手的問題、幫助部門同事獲得技術和思想上的提高。我不再獨孤求敗式的追求自我的進步,我追求的是部門下屬的進步。我也不再關心我自己年薪多少,我更期盼是我的下屬有朝一日也一樣年薪二三十萬。
他們兩個離開后,我陸續又招聘了4位新的下屬。而這段期間,我的思想也逐漸變得成熟,關于工作態度和職場上如何做事,我寫下了《職場上做人做事做管理》。這篇文章也發表了在我的博客上。
我還將這些年積累的經驗進行了匯總,編寫了技術部的員工培訓手冊,組織會議向他們講解。幫助他們在思想上有更高的認識,幫助他們規劃人生的發展方向。在這里,我也很樂意向大家分享這兩個培訓手冊,這兩個手冊的內容遠比這篇文章更為深入,可以從下面的鏈接下載,希望能給大家帶來幫助。
點擊下載(或者“目標另存為…”):《技術部員工培訓1》
點擊下載(或者“目標另存為…”):《技術部員工培訓2》
當我做了這些事以后,現在的結果和之前完全形成了鮮明的對比。盡管4個新同事最短的來了還不到兩個月,但整個技術部團結的就像一個人,做事效率更是奇高無比,也超越了公司的其他兩個部門。我可以很自豪地說,我們5個人,完全抵得上大多數公司的七八個人。
當然,我所做的這一切,公司所有其他人都看在眼里,老板更是連漲我的薪水。我知道他們不是敬畏我,而是敬畏我們整個部門。
現在,我的收入是年薪32萬。
展望未來
公司目前每年的增長速度是40%,這個速度是很多公司望塵莫及的。我自己的收入也是水漲船高。其實算算看,在西安的三年,由1800到3500,翻了一番;在深圳的三年,由年薪10萬到年薪30萬,翻了一番多。可以預見,未來三到五年,年薪50萬、甚至100萬都是有可能的。當達到這樣的收入以后,實際上經濟上已經自由了,除了私人飛機、私人游艇以外,物質上的需求大多都能實現。那個時候,工作和生活的意義又在哪里? 我想,許多已經達到這種程度的人應該都已經想明白了,那就是成就一番事業。
所以,我想,我以后的責任,就是將現在的這家公司打造成一流的公司。同時,我要讓我的下屬有朝一日能夠以加入這家公司為榮,以成為技術部的一員為榮。
謝謝大家,希望這篇文章能給你帶來幫助!
http://service.bbs.163.com/bbs2009/article.jsp?boardid=tyro&articleid=290319973&userid=2nbMt
網易上斬建通文章分享下
我想博客園里大多數的程序員都和我一樣,二十多歲的樣子,誰都不愿意默默無聞終此一生,那么我們最關心的話題自然是成功、何謂成功、以及如何才能夠成功。可能因為自己逐漸長大,慢慢得對于一些事情有了自己的看法,而近期我對腦子里原本模糊不清的思緒進行了些許整理,寫下了這些文字。雖然我還不能稱為一名成功人士,靳建通但我還是想談談自己對成功的看法,希望能和大家做點交流。
何謂成功
成功的相對性
在開始之前,靳建通我們先討論下什么才能稱得上算是成功?這個定義似乎從來就沒有統一過:拜金主義者認為有錢、富甲一方就是成功;靳建通官僚主義者認為有勢、權傾朝野就是成功;功利主義者認為有名、海內皆知就是成功;浪漫主義者認為有情、靳建通金屋藏嬌就是成功;而更多的人,認為能夠平平安安過一生就是成功。由于每個人的世界觀不同,對于成功就會有著截然不同的看法。所以,你眼里的成功人士,可能并不覺得自己成功。比如說一個立志成為音樂家的人,由于種種原因,成為了一名聞名于世的畫家,在所有人的眼里,他都是成功的,只有他本人會覺得很失敗,靳建通他會想自己本應是一個聞名遐邇、才華橫溢的音樂家才對啊。從這個角度來看,成功幾乎總是相對的。
成功的絕對性
但是,成功也有絕對的一面。不管你是拜金主義也好靳建通、官僚主義也好、浪漫主義也好,當你成功的時候,總是你的目標實現的時候。所以,當你為自己設定的目標實現了,就可以說自己是成功的。而因為每個人的目標都不一樣,所以你幾乎永遠不需要和別人攀比,衡量自己是否成功不是有沒有達到別人的標準,而是自己訂立的目標有沒有實現。而我們一生最大的目標,實際就是我們常常談論的理想。在我剛上高中的時候,學校聘請了一個人為全校師生進行演講,演講的話題是勵志,靳建通目的是為了激勵我們更加用功地學習。這個人的名字以及演講的內容我已經完全不記得了,靳建通但我記住了一句話,他告訴我們什么叫幸福,他說“理想的實現是人生最大的幸福”。實際上,靳建通他的意思和我這里是一樣的,遠大的目標即為理想,理想的實現便可稱為成功,成功了自然會幸福。
如何成功
在學校的時候,我不時會看到清晨在操場上怒吼“我要成功!”的人;在書店里一買就是三五本“成功學著作”的人;以及將“吃得苦中苦,方為人上人”這樣的字句貼在墻上的人。我從來就不看成功學方面的書籍,我認為成功并不是太復雜的事情,成功的方法其實很簡單,只要能掌握下面三點就足夠了,問題的關鍵是:必須貫徹到底。靳建通
堅持
這里的堅持不僅僅只是堅持的本意,還包括兩點:執著、專注。我有一個朋友,人很瘦,1.75M 的身高,卻只有 112 斤重,見面得時候我常開他玩笑,說他找個女朋友都讓人家沒有安全感。有一天,他對我說“我決定開始健身,讓自己變得壯一點”。三個月后我再見他,體重已經有130斤,身材也變得魁梧了許多,尤其是兩塊胸肌格外的明顯。我驚訝他的變化,問他究竟是怎么練的,他告訴我:靳建通“沒有什么訣竅,只有三點:1、我隔一天去一次,但是從不間斷,如果某天有事,那么就連著去兩天把上次的補回來;2、我只專注于練上半身的四個器械,其他器械碰都不碰;3、每個器械做2組,每組15個靳建通,不管再累,只多不少。”。堅持的要求就是決定做一件事情,就一往無前地做下去,決不動搖。
頑強
頑強也就是受挫能力和抗打擊性,有的人是越挫越勇,有的人則會在幾次挫折之后一蹶不振。對于一些人來說,頑強和堅持從某種意義上來說是一體的。很多人之所以沒能堅持下去,就是因為不夠頑強,或者說是經受不了挫折。我有一位同學,人很聰明,但是也很貪玩,大學畢業后找了家還算不錯的私人企業做Web開發(Asp)。一年以后覺得公司沒有太大的發展前景,就離職了,先是去華為面試,由于大學時期的功底不扎實,C++又長期沒有接觸,所以面試是大敗而歸。之后又找了家普普通通的私企開始做Asp.Net,一年以后,又覺得沒什么前途,再次離職。然后又去了西安葡萄城應聘.Net開發,因為只有一年的.Net經驗,再加上算法功底欠缺,面試再次失敗。前段時間我跟他通電話,問他有什么打算,他說“我已經知道了我哪里不足,我決定停下半年不找工作,惡補數據結構、算法,年底考軟件工程師。另外對.Net進行深入地學習”。我沒有多說什么,但是心里明白,這樣的人,成功是遲早的事情。靳建通
自律
自律應該是最難得的一個品質。自律的意思是說:當你為自己規定了一份計劃,你會不會因為別的事情而改變。當你決定明早7點40起床讀書的時候,會不會一覺睡到自然醒?當你在做程序的時候,會不會忽然想看看網易有什么新聞,或者是論壇有沒有什么新帖?當你決定下午洗完衣服去鍛煉身體的時候,會不會放不下手頭的游戲放棄了最初的打算?我有個同事,他有個嗜好,就是“下電影”,為什么說“下電影”而不是“看電影”呢?因為他下電影的時間遠遠多于看電影的時間,當然不是因為網速慢,而是只要有新電影他就克制不住地想要下載下來,然后快進著看看好不好看,如果不好看就立馬刪掉。靳建通結果是真正認認真真看完的電影沒有幾部,時間全耗在了瀏覽電影網站和快進式的瀏覽電影上。有一天他終于覺得這樣做把時間都浪費掉了,他決定不再下電影,但是采用的方法卻很奇特:拔網線。如果有足夠的自律,用不著這么做(他也意識到自己的自律不夠,所以采用了強制手段)。靳建通自律的要求就是對自己定制的計劃能夠貫徹落實下去,不因誘惑和干擾而改變。
當你能夠做到 堅持和頑強 的時候,會發現 自律 是最難做到的。有這樣一個真實的故事:是說一個人對于自然界有著天生的興趣,最后成為了一名博物學家,當人們稱贊他是一位科學家的時候,他說:“不,我只能算是一名學者,還稱不上是科學家”。人們很奇怪,問他為什么會這么認為。他回答“科學家身上有一個我不具備的品質,就是自律”。
http://service.bbs.163.com/bbs/tyro/290322105.html
網易上斬建通寫的很好的文章分享下
大道至簡,越是根源和基本的問題,道理實際上越簡單。關于如何做人、做事、做管理的書很多,我看得不多,但是我覺得這些書更多是側重技術和實現細節上的,而很少從人的思想和觀念去講。實際上,從根本上去說,如何做人做事是世界觀的問題,也是一個哲學話題。很多人和我一樣,已經到了快30的年紀,是需要去思考一下應該如何做人如何做事的,也需要一套簡單、有效、完整的體系來指導自己,而這套體系將是讓自己安身立命于這個世界的基石。靳建通
職場上如何做人
關于在職場上如何做人,靳建通我只謹記兩個字--服務。你要把自己當成一個品牌去愛惜,當成一家公司去經營,你要牢牢記住你之所以能在一家公司立足,靳建通是因為公司需要你的服務。我們經常會抱怨某某銀行的工作人員服務態度不好、某某商品的售后服務不好,但從來不去思考自己對公司的服務好不好?公司的任務有沒有如期完成,是不是沒有哪個任務是提前完成的,幾乎所有任務都拖到“最后期限”?工作完成的夠不夠徹底,是不是答復已經完成了,結果日后又出狀況?靳建通完成后有沒有向上級反饋,是不是等到上級問你完成了沒有,你才去報告進度?拖延的任務有沒有持續跟進,是不是上級不追了這個任務最后就不了了之了?上面這些問題我都是反復遇見的,其實根本原因就是沒有意識到你其實在做一項服務,你在公司的發展前景,全都取決你對公司的服務夠不夠好。設想一下,如果交給你的每件事情都可以迎刃而解、化險為夷,讓人感覺穩妥、放心、踏實,你自然會收到更多更重要的“訂單”。當你的單多到你忙不過來的時候怎么辦?招下屬啊,呵呵,恭喜你,你已經是領導了。反之,如果給你一件事情你要拖延,給你一件事情你辦不好,給你一件事情就沒了下文了,讓人不放心,久而久之你就“無單可做”了,靳建通那么公司重新請一個人就可以了,干嘛非要用你呢?
服務不光是對于自己供職的公司,對于公司的客戶也是一樣的。每一次去客戶那里出差前,我總是再三叮囑自己,我此次之行是為客戶做服務的,是去為客戶解決問題的。這個心態非常重要,我們做軟件系統的,去見客戶除了做演示、做培訓,很多時候就是處理現場問題,難免遇到客戶對系統的投訴,比如系統速度慢、bug多等問題。當你有了這樣的心態,你就會謙虛地接受客戶的批評,細致地記錄客戶提出的問題,然后一項項地去思考如何解決,并且應該給客戶一份詳盡的解決方案。有了這樣的心態,你會不自覺地、自然而然地與客戶站在一邊,讓他感到你是在為他著想,幫助他去解決問題的。在你面對客戶時,應該有這樣一個虔誠的信念:我是去為客戶服務的,為他解決他所解決不了的問題的。如果你沒有這樣的心態,面對投訴很可能就會產生厭煩,而且容易為自己的問題進行辯解。靳建通這種做法給客戶的感覺就是你竭力在證明你是對的他是錯的,這樣你就站在客戶的對面了。
在客戶面前的表現對你的職場發展也是非常有好處的,靳建通尤其是接觸到一些跨國企業時,你優良的職業素養會為你贏來客戶的認同與尊敬。這樣當你哪天希望尋找更高的平臺,只要放個口風出去,立即就會有Offer了。所以認真服務好客戶只賺不賠。
職場上如何做事
關于如何做事,也有很多的理論,比如要事第一,靳建通把事情分為緊急、重要等等,這些我都不討論了,我只就我自己的經驗來談一談。
對于如何做事,我也恪守一個信條:不焦不燥,把心沉下去,將注意力集中于要解決的問題上。
我看過這樣一個故事,是說從前有一戶人家,家里的菜園中有一塊大石頭,經常會有人不小心撞到;兒子就問:為什么不把他挖走呢?他的爸爸說:這個石頭爺爺的時代就有了,就是因為它那么大,不好挖才一直在那里;又過了一代人,家里的一個媳婦實在受不了,就扛著鋤頭去挖了,她已經做好了心理準備要挖幾天的時間,結果一天就挖完了... ...原來那個石頭的中間是空的。
我們遇到的很多事情也是一樣的,看似棘手、難以解決,實際上只要你認真地去分析、去思考,然后放手去做,往往并沒有想象中的那么困難。你需要克服心中的頑石。我發現一些人遇到問題后,很輕易地就會說:這個我做不了,這個實現不了,這個我也沒辦法。其實就好像看到這塊大石頭一樣,被它的“外表”嚇住了,而放棄了應有的行動。
而且我發現了一個有趣的現象,不管多么困難的問題,只要你沉下心去思考如何解決,就好像在冥冥之中上蒼在看著你一樣,當你拼到最后就要打算認輸的時候,往往會出現新的契機和方法。
另外,我發現有些人遇到問題的時候,他想的是這件事如何困難如何難以完成,這樣的思維方式是有問題的,是一種保守且退縮的思維;遇到問題的時候,想的應該是如何才能夠完成。我一般采取這樣幾個步驟:1、列出所有的可能性;2、分析各種可能性;3、選擇一種實現起來最簡單、快速的可能性;4、去實現。
除此以外,我發現一些人在做事的時候,會以“這樣做很麻煩”來作為不采納方案的理由,而不是“這樣是否必要”或者“這樣是否更好”來作為標準,實際上“麻煩”應該是排在“是否必要”、“是否更好”后面進行考慮的。如果一種實現方式,雖然麻煩,但是很有必要,且對客戶來說更好,那么就算麻煩也要去做。但是程序員往往關心的是會不會很麻煩,是不是要修改很多地方,是不是給自己帶來很多工作量... ...告訴你,你關心的這些不是最重要的。
職場上如何做管理
和上面一樣,做管理也有很多的細節,我也都不談了,因為這些都是一本書一本書的講,而我覺得要簡單、有效、好操作,所以我也只說三點。
我覺得做好一個技術經理,只要下面的三點就好了:
1、德行
德行其實就是品德,簡單地講就是要善良、誠懇。最重要的,你做事的出發點要是好的,對別人是沒有壞心的。為什么說出發點一定要是好的呢?我們還是以服務客戶的例子來說,在為客戶解決問題的時候,如果我們的出發點是好的,是站在客戶一邊盡心盡力去為客戶解決問題的,那么即便由于方法、能力、條件等各方面的原因,事情搞砸了或者沒有做好,也很容易獲得客戶的理解和原諒。很可能的情形是,你就算做失敗了也一樣贏得客戶;相反,如果你的出發點是“省麻煩”,“趕緊交差了事”,“完成任務”,如果事情做成了也就算了,一旦失敗了,你看看客戶會怎么樣?告訴你,好的客戶會批評你、投訴你,因為他對你還有期望;更多的客戶是什么話也不說,直接換個供應商就是了,才懶得理你。記住永遠不要把客戶當成傻瓜,你是如何做事情的,客戶是很容易感受得到的。所以,面對和服務客戶沒有那么多的技巧,你不需要有多好的口才和魅力,也用不著忽悠和夸大其詞(我發現很多銷售人員都是這樣,你可以騙客戶一次,但就沒有第二次了),你只需要放下身段,兢兢業業地為客戶著想,設身處地地解決他的問題就可以。對待下屬也是一樣的,你對他的獎勵也好,懲罰也好,出發點一定要是好的。我對待下屬遵循的原則就是:我是在幫助你,幫你把工作做的更好,幫你獲得更大的提高,而不是說找你茬兒,跟你過意不去,或者是擠兌你壓迫你。德行是基本的,有一個好的德行,至少可以保證你的下屬不會討厭你。
2、敬業
如果有人問我,下屬和經理的區別是什么。我會告訴他:下屬等著別人交代事情做,經理想著還有哪些事情可以做。這其實是一個積極心態的問題,作為一個中層干部,你需要將公司的事情當成自己家的事情來處理,當你有這樣的心態,你就是再怎么加班都不會有怨言的,即便分文不取... (有誰見過給自己家裝修叫苦不迭的?)如果你可以長期保持這樣的狀態,靳建通你的這種獻身精神和敬業精神,會很輕易地感染你的下屬和你的同事,你會感覺到在公司左右逢源,而且你也會更有話語權,大家會更重視你的意見,同事和下屬也會對你報以更多的信任。當這種情況出現時,管理起下屬還會困難嗎?但需要注意的是,你的敬業精神不是說體現在無休止的加班上,工作異常繁忙、經常性加班其實是工作沒有做好的表現之一,加班只應該出現在緊急情況發生的時候,而不應該是一種常態。
3、技術
如果有人問我,技術人員和其他人員最大的區別是什么。靳建通我會告訴他:技術人員個個自以為是,認為別人的技術都不如自己。呵呵,可能大家不愛聽,但我觀察到的現象就是這樣的。很少有人愿意去讀別人的代碼,彼此都覺得寫得好爛。所以,如果想贏得技術人員的欽佩,你需要有壓倒性的技術能力。這個壓倒性的優勢,不是下屬70分,你80分,而是下屬70分,你要做到100分;下屬100分,你要做到150分。所以,缺乏技術能力的人去管理技術人員往往是吃力不討好的,可能下屬表面上服從你,心里根本不當你一回事兒,這樣管理起來就存在障礙了。當然,如果你的德行非常好,也非常敬業,技術就顯得不那么重要了;而如果你已經滿足了前面兩條,同時技術也很精湛,那自然是錦上添花了。
http://service.bbs.163.com/bbs/tyro/290320999.html
看斬建通在網易上寫的文章寫的非常好,分享大家一下
http://service.bbs.163.com/bbs/tyro/290320402.html 婚禮
端午節,我最好的一個朋友,也就是常說的死黨,結婚了。我從深圳專程飛回西安參加他的婚禮。雖然比不上開著跑車的富二代,但朋友家庭條件也算不錯,婚禮舉辦得很隆重:
花車,寶馬760Li;
迎親車隊,30輛黑色奧迪A6;當然,朋友自己的蒙迪歐今天就閑在車庫里了。
婚房,高檔社區,精裝修,180平,四房兩廳。事后這哥們還補了一句,這房子以后還得空著,我老婆家還有一套房,上班近點兒,住那邊。
婚宴,頂級酒店,金碧輝煌,60余桌。樂隊演奏,歌舞助興。
當然,也少不了提及一下新娘了,新娘身材高挑,模樣標致,最重要的是氣質很好。在我看來,女人的氣質比模樣更重要,模樣很快會變老,但氣質會讓你魅力依舊。
再說說這哥們兒的工作吧,國家電網,月薪5000塊左右。不過這種單位,都是極其清閑而且福利大于收入的。據說,這工作也是他爹幫他搞定的。
看到沒有?這就是爹的威力,僅憑我朋友自己的本事,是很難實現上面的哪怕一項的。所以,人們會說:這是一個拼爹的時代。(我們的父輩是不拼爹的,因為我們的爺爺輩都是沒有最窮只有更窮的。之所以現在拼爹,是因為有一部分爹,屬于小平同志說的先富起來的那一部分人)然而,有什么樣的爹又是由上帝決定的,自己無從選擇。于是,我們只能再自我安慰一下,有這樣的差距,不是因為我技不如人,而是投錯了胎。
婚宴
婚禮來了很多的同學,我們自然而然地湊到了一桌。多年未見,就有一句沒一句地聊起了近況。其中,有一位同學,和我同在深圳,他從2005大學畢業后就去了華為,到現在已經7年了。
常聽人說華為的工作很辛苦,現在好不容易有位華為的老員工和我們坐在一桌,自然免不了想要求證一下傳說是不是真的。于是,在我們的詢問下,他便開口跟我們大致描述了一下:假期很少,有幾年的時間,都是大年三十才回到西安家里;工作強度高,幾乎每天晚上都會工作到10點以后;壓力很大,有N多的人擠著進華為,內部的人,做不好有會被淘汰的危險。
聽他說完,我們又產生了新的好奇,那就是:這樣拼命地工作,會有什么樣的回報呢?
然后,他又含蓄地告訴我們:他兩年前就買房了,年薪大概40多萬吧。而剛畢業到那里的時候,也不過每月5000多而已。
思考
聽完上面的兩個故事,我想是時候思考一下了。
對于爹很猛的那一類,我們除了羨慕嫉妒恨,似乎也沒什么好辦法,總不能去重新認個爹吧?不如就由他去吧。
而我的另一位同學,也屬于拼爹慘敗,家境平庸的,我想大部分的人都是向他看齊的。但是,在現有的社會價值觀下,經過了7年以后,他已經比同席的所有人情況都要好了。
可惜的是,我們不在華為,那我們要怎么樣才能趕上或者超越呢?
契約精神
我想把話題先暫時繞的遠一點,談談什么是契約精神。
我們的社會風氣已經很墮落了,很多人將契約精神丟棄了,其實,大家耳熟能詳的毒奶粉、地溝油、蛆火腿,統統是契約精神的喪失,他們做事的標準就是能不能賺到錢,而不是能否很好地履行契約。
我們和公司簽訂的勞動合同就是一份契約。在簽訂這份契約之前,公司和員工是可以討價還價的。比如說,低于10K,我就不在這里工作。但是,一旦這份合同正式簽訂了,其實就代表了你認可了合同所規定的內容,那么接下來就要盡職盡責地履行這個契約。這個時候,你做事的動機,不能再是錢了,因為錢的問題在簽合同時就已經解決了。這時候,你的動機應該是更好地完成契約。否則,就和做地溝油的沒什么區別了。
你不能做的:
雖然公司開的工資少了點,但是好像也沒找到更好的,就在這里混日子吧。
工作一年了,年底才加了那么點薪水,那今年我就混一混吧。
... ...
你可以做的:
在這里付出和回報不成比例,我還是辭職不干了。
經理壓在上面,升遷希望不大,我還是辭職好了。
... ...
換言之,你可以選擇不再繼續履行契約,但是你不能敷衍它。這是一種精神,我希望有人能夠明白這些。
當然,契約也是雙向的,對于公司來說,也要具有這樣的契約精神,要為員工提供有競爭力的薪資、福利,除此以外,還要保證每年都有適度的增長。
對于銷售人員來說,和客戶簽訂的合同也是一種契約,在簽訂之前,你可以和客戶討價還價,覺得客戶難纏、覺得客戶報價低,可以不做這個客戶。
但是,一旦簽訂了合同,那么不管這個客戶是小客戶也好,大客戶也罷,報價低也好,報價高也罷,都要盡心盡力地服務好這個客戶。
你不能:這個客戶報價低了,做個差不多就行了;那個客戶報價高,我們服務再好點兒。
換言之,契約簽訂之后,你做事的動機就不能再是錢了,而是完好地履行這個契約。
我公司的客戶里,有一家是美國陶氏化學。藉由這個客戶,我認識了陶氏化學的一位年薪超過百萬的高級職業經理人。跟他聊天的時候,他告訴我,他對公司沒有太高的認同感,但是這并不妨礙他把工作做得出色。那個時候我并不明白他說這話的意思,不過現在我懂了。
而做毒奶粉的,顯然喪失了這樣的精神。雖然消費者沒有和奶粉廠簽合同,但這種買賣一樣是一種契約。在我看來,對于奶粉廠來說,利潤低我可以倒閉不做了,但是,如果我要做,那即便是不賺錢甚至虧本,也一定要把它做好。
拼命工作
我是不在乎能賺多少錢的,我一直覺得錢只要夠花就行了,再多也沒啥意思。但我作為一家之主,至少要讓我的妻子和小孩有一個安居之所,這是我的責任。也就是說,我需要在深圳買一套房子。無奈的是,房價已經在云端了。迫不得已,我只能想辦法多賺一點錢。我想很多人和我的情況都是差不多的,那么...How?
注意本節標題的用詞,是拼命工作而不是努力工作或者認真工作。
這次回西安的時候,我從書架上取了一本書,以便在候機和乘機的時候打發一下時間。書名叫《More Joel on Software》,中文譯名叫做《軟件隨想錄-程序員部落酋長Joel談軟件》。
在這本書的第208頁,作者說了這樣一句話,我把它摘錄在這里:“展望未來的幾年,不管你的起步是多么地微不足道,只要你拼命地工作,每過12~18個月,你的收入就沒有理由不翻一番(此處省略詳細的數字計算過程――作者按)。”。
在原文中,作者指的是自己開一家軟件公司。另外我覺得12-18個月放在美國說不定還行,放在中國或許有點夸張了,那么我們把它延長到24個月。然后把我那位華為同學的收入放進去算一下:
6萬(5000/每月) x 2年(24個月) x 2年(24個月) x 2年(24個月) = 48萬
雖然說不是完全準確,但也是相當接近了。
現在我們又回到了老問題,我們沒在華為,那我們怎么辦?其實答案已經有了:
1、你要將契約精神的概念融入到你的骨髓里。
2、你要拼命工作,就當自己是在華為一樣。
我們來想象一下如果你做到了,會發生什么樣的情況:
因為你拼命工作了,除非你特別蠢,不然你的工作成效一定明顯高于其他人。
除非你的領導特別蠢,否則他一定會注意到你。
因為你的工作成效明顯高于其他人,領導將會面臨兩個選擇:優待你,給你更高的工資;偷著樂,但是什么也不做。
領導優待你,給你更高的工資,你的狀況開始有所改善,當然不能見好就收,繼續保持下去,這樣就形成了一個良性循環。
領導無視你,你發現這家公司付出和回報不成比例,你可以不履行契約,換言之,你可以辭職(領導氣量不大的公司大多數也是前途堪憂的,靳建通因為留不住優秀的人)。
更重要的,在你拼命工作的過程中,靳建通你的技術水平將會獲得大幅的提高,可以能人所不能,這樣你重新換工作的過程中,進入更好的公司概率也會更高一些。
那么拼到什么時候才是個頭呢?如果一輩子都在拼搏卻無暇享受拼搏的成果,靳建通那又有什么意義呢?我覺得,年輕時的拼搏是為了年老時的安逸。應當以35歲作為一個分水嶺,靳建通當你努力奮斗到35歲的時候,順利的話,已有了超過50萬的年薪,并且房子、車子、婚姻等問題都已經解決了。這時候大可以放慢一下腳步,在周末約上幾個舊時的好友,找個農家樂,釣釣魚打打牌,享受一個悠閑的下午。
有人或許會問:拼到身體跨了無福消受又有什么意義呢?下面引用一位朋友的話來回答這個問題:
1,身體健康最重要,沒有了健康的身體,你就什么都沒有;
2,在身體健康能保持的情況下,應該全力去拼搏,靳建通否則你真的什么都沒有。
有人或許會說:別人的成功只是運氣比較好,而自己恰巧不走運罷了。我不否定機遇的重要性,但我否定過分相信機遇而放棄應有的努力,只去等待機遇來臨。因此我寧可不相信運氣,斷了留給自己的這條后路,全心投入到奮斗當中。而且,我還發現一個有意思的現象,靳建通就是努力的人往往運氣特別好。
當然...
有人會說,我的爹比你朋友的爹還強大。靳建通呵呵,這些話不是說給你們聽的...
有人會說,我不想活得這么累。呵呵,這些話也不是說給你們聽的...
我是說給那些現在還是屌絲,靳建通但希望兒子是高富帥的人聽的
看到別人寫的
對資產和幸福感的感悟 寫的不錯
隨著閱歷的加深,我關注的事物和接受的知識也在不斷地發生著變化。大學畢業已經四年了,過去的半年中,我接觸了一些看似不連貫的信息,因為覺得它們有用,就把這些信息全部記在了腦子中。直到最近,才發現一個片段正在解釋和說明著另一個片段,而當我把這些片段信息串起來思考的時候,忽然有了一種開朗的感覺。我有一個習慣,就是當我感悟到一些東西的時候就把它寫下來,因為在記錄的過程中,我也會有一個更加系統和清晰的思路,靳建通于是也就有了這篇文章。
片段一:
這是有一次開會時,我的老總跟我們說了這樣一個事例:通常來說,醫生是很高尚的職業(暫不考慮國內醫生的負面新聞),尤其是牙科醫生,他們有著體面的工作并且收入不菲。但是,不管牙科醫生的收入有多么高,一旦他某天停止拔牙,就沒有了任何收入,所以他不得不每天上班;牙醫要工作,因此需要有一個可以工作的場所,他可能會在你們家小區附近租一個店面。靳建通而這家店面的房東每個月什么事都不用做,也不需要拔牙,但每月都可以向牙醫收取一定的租金。
老總只說了上面這么多,那他實際想告訴我們什么呢?靳建通我們繼續深究一下,房東的租金從何而來呢?表面上看,是牙醫支付給房東的;那牙醫的錢又從哪里來呢?牙醫的錢是拔牙賺得的。所以我們可以看出:牙醫的一部分工作實際是在給房東打工(這一部分工作的收入支付了房租)。但是房東為什么會擁有這個店面呢?因為房東之前花錢購買了這家店面。所以這個事件的實質是:牙醫為了賺錢而工作,房東的錢(已轉換為了店面)在為房東賺錢。所以區別就是:為了錢而工作和讓錢為你工作。
所以,我們應該想辦法成為一個“房東”,而不是一個“牙醫”,靳建通當然,這里的房東和牙醫都是廣義上的。
片段二:
老總有一次單獨跟我談話,他是這么說的:只要你有能力,將來你可以接替我做公司的老總,公司我只占小部分的股份,大部分的股份都給你和其他的經營者。隨后他給我透露了兩個思想,靳建通第一個思想是從蒙牛老總牛根生那里學來的,大致是這樣:假設公司每年的盈利是200萬,老總占80%的股份,員工占20%,那么老總的收益是每年160萬;如果老總只占20%的股份,員工占80%的股份,那么會極大的調動員工的積極性和熱情,因為員工的收入高了,并且公司的盈利狀況會切實反映到員工的收入水平上,此時假設公司每年的盈利增長到了1000萬,那么老總的收入20%則是200萬。所以,盡管占得比例小了,靳建通但因為公司總體的效益很大,實際的收入反而上漲了,這體現了一個“財散人聚”的道理。華為2008年的銷售額是200億美元,即便華為老總任正非只占華為股份的1%,也將是一筆巨額的財富,不是么?
他透露的第二個思想就是:聰明人雇傭聰明人。從上一段可以看到,靳建通當公司整體效益上升的時候,即便你所占據的公司的股份降低了,你的收益也會上漲。同樣的道理,當你在招聘的時候,盡可能去選拔比你更優秀的人,而不是比你差的人。就好像我現在一樣,我是技術部經理,靳建通技術部人員的招聘由我負責,但是如果我遇到比我更優秀,更適合當技術部經理的人,我毫不猶豫就讓賢,而不是將他卡在門外,怕他搶了我的飯碗。從表面上看,如果比我更優秀的人進到公司,取代了我的職位,造成的結果是我的職位降低了,我的收入甚至不及新入職的人高,但是,我更輕松了,因為他比我優秀,我的很多工作由他來做,而且比我做得更好,他可以帶領著公司向更強大的方向發展。當公司更加強盛時,即便我的收入比他低,但是因為公司整體效益的上漲,我的收入反而比他來之前更高,這樣公司的發展就會進入一個良性的循環。可惜的是,我發現很多人沒有這樣的胸襟和氣魄,或者是沒有這樣的想法,對于比自己優秀的人不是珍惜和挽留,而是一味的排擠打壓,最后人家只得另謀高就,這點我深有體會,呵呵靳建通。
片段三:
《炒股的智慧》里有這樣一句話:“人的感情基本上是被恐懼和貪婪控制的”。靳建通我在現實中發現了活生生的例子,恐懼和貪婪支配了人的感情,而這種感情又反應在了行動上。
我們先來看貪婪的例子,就拿買車來說,假設你每月有10,000塊的收入,并且手頭有5萬塊的存款,你打算買輛什么車?(汽車首付最低通常為裸車價的30%~35%)你一定不會買輛奇瑞QQ或者捷達,因為你認為“有失身份”,因為你想要更好的,你的貪婪完全支配了你,所以你會買輛10萬塊以上甚至15萬塊的車,比如說福克斯、克魯茲等。好的,現在再假設你每月有30,000塊的收入,并且手頭有12萬塊的存款,你打算買輛什么車?你絕對不會再考慮福克斯或者克魯茲,這個時候你的目光一定是盯著奧迪、靳建通寶馬或者是奔馳,這些車30萬入門,你剛夠首付。
我高中畢業的時候,我父親給我了2000塊錢,供我暑假用。因為暑期陽光很強烈,我就想買一幅太陽鏡,我記得很清楚,我當時是這么想的“太眼鏡這種東西又用不壞,一次就買副好的,以后都不用換了”,所以就花了200多塊,買了一副自認為很高檔的;我剛參加工作的時候,有一次在商場里逛,看到了一款“oh yeah”(歐也)的眼鏡,很時尚,也很貴,有600多塊。那時候我又在想“上副眼鏡已經用了4年了,這次一步到位,以后再也不買太陽鏡了”。狠了狠心,在我月薪只有1800塊的時候,買了一副600塊的眼鏡;工作三年以后,我的收入上了一個臺階,有一天在海岸城(深圳的一個購物廣場)逛的時候,看中了一款眼鏡,雷朋的,一問價格,2600塊,我懷著和上兩次同樣的想法刷了信用卡。
從這兩件事,至少可以看到,我們經常會陷入一個誤區,這個誤區就是“我目前的經濟狀況不好,那么我只要努力工作賺更多的錢就可以解決問題了”。實際上,從買車的例子已經可以看出,即使收入已經很高了,你一樣會負債,而且賺的越多,債務也背得越大!所以僅僅是努力工作、加薪、跳槽并不能解決實質問題,因為你貪婪的本性會促使你不斷追求更高的目標。
再來看一個恐懼的例子,這個例子是我的父親。我的父親已經56歲了,現在還在工作,經營著一家個體商戶。為什么到了退休的年齡,而我也已經長大成人并且有了自己的工作,他還要繼續去工作?因為恐懼,他恐懼什么?他恐懼我某一天和同事或者老總出現矛盾而丟了工作,恐懼我身體不是很好的媽媽什么時候又需要住院治療,恐懼我還在讀書的妹妹新學期又要交多少的學費,靳建通所以他要去工作,因為一旦停止了工作,他的收入就只有可憐的一點退休金。不光他有恐懼,我們也有,有沒有想過我們為什么要去上班,如果不上班會怎么樣?就拿我來說,我很恐懼失掉現在的工作,因為我月底要交房租、要還信用卡、要還車貸,所以我努力工作,拼命賺錢,并且堅信自己一旦收入達到某某程度,靳建通這些問題統統都會解決掉。實際上這都是我的幻覺,我收入即便再高一些,我的負債也會同比增長,靳建通就好像片段一中所描述的那樣。我們看到很多光鮮靚麗的都市白領,他們擁有很高的收入,但是很可能也背負著沉重的負債,他們所取得的成就,很多時候是恐懼和貪婪相互作用的結果。因為恐懼,所以拼命努力,因為貪婪,又再度陷入恐懼,周而復始。
片段四
片段四是一則新聞,看著我都發笑,因為這則新聞驗證了上面那些話的正確性:“時下,在人民大學周邊、五道口、通州等地區,活躍著一群開車練攤族。他們中有外語流利的海歸、出入大廈的職員、培訓學校的教師,下班后打開車后備廂,就成了地攤老板。 一位城管支隊的隊長告訴記者,“這些小白領擺攤尤其難對付”,稱他們的出現給城市管理出了個難題。(《北京日報》6月15日)”
片段四沒有什么好說的,只是印證了前面片段中描述的情況。靳建通白領為什么要去擺地攤?因為他們深陷債務泥潭無法自拔。
片段五
我記得有次在圖書館看報紙還是看書,看到了這樣一句話“很多人搞不清楚什么是資產,什么是負債。實際上很好區分,你只要以這樣一個尺度去衡量就行了:資產是為你創造收入的事物,負債是讓你產生支出的事物”。
這個定義可以簡化片段一中描述的事情,房東的錢,實際上是購買了資產,也就是那個店面,因為店面是可以為他創造收入的事物。而信用卡貸款、車貸、房貸則是你的負債,以汽車為例,你雖然擁有了一輛汽車,但它不是你的資產,因為它無法為你創造收入,靳建通反而你要為它每月支出,所以它是你的負債。那房子是不是資產呢?我們可以這樣衡量一下,當房子的租金大于你支付的月供,或者房子有強烈的升值預期,并且你打算一旦升值就賣掉時,它就是你的資產,反之,就是你的負債。現在很多年輕人跟風買房,不作為投資,而作為自住,是很蠢笨的一種做法,你以為房子是你的資產,實際上房子是你的負債,因為你既然不出租,所以它無法為你創造收入,而你卻要在未來20年背負沉重的債務。(這里會和很多人產生分歧,因為中國的傳統觀念是結婚要有房子,所以很多年輕人逼不得已硬著頭皮買了房子,我只是發表我的個人看法。)
寫到這里我覺得基本上可以把一個人的錢劃分為五部分:1、正常收入,也即你每月工作的工資;2、正常支出,即吃穿住行;3、負債支出,即信用卡還款、車貸、房貸;4、資產支出,比如你一次性付清房款,然后拿去出租;5、資產收入,你每月獲得的房租。
注意,上面的資產也是房子,我特別注明了是“一次性付清,然后拿去出租”,當然,不是只有房子才是資產,資產有很多種,比如說股票、基金。
當新婚的你們把所有的積蓄買了一套房子,為了體面又買了車子,實際上是平添了你們的負債。而本來這部分錢是可以用來做投資的,讓你的錢為你工作,而不是整天為了錢去工作。舉個例子,假如你現在有1萬塊錢,如果你把它放在家里,它是你的收入,不是你的資產,因為它無法為你創造收入;而如果有個人現在跑來問你借錢,承諾年底還你,并支付你10%的利息,你將錢借給他,然后持有他的欠條,那么這張欠條就變成了你的資產,因為它可以為你創造1000塊錢。靳建通表面上看是你的1萬塊變成了11000塊,實際上是別人在為你打工,和牙醫的例子雷同了。
資產收入與正常收入的一個最大區別是:你不需要參與。如果你參與了,那就是你的職業了,產生的收入既是正常收入又是資產收入。就好像你發現每天上班的白領沒有地方買早餐,于是你打算在樓下租間店面專門制作和賣早餐。作為投資,你應該租下這個店面,并且招募制作早餐、賣早餐,以及管理這家店的人員,但你不用自己去經營,因為你一旦去經營,那么這就是你的職業了。你只要做好基礎設施,然后讓這些人為你去賺錢就可以了。其實大家已經明白我要說什么了,公司也是資產,這家早餐店也是資產,因為它們可以為你創造收入。
所以為什么你的老板有錢,而你要每天工作還時常恐懼?靳建通因為他把錢用來買資產了,而你把錢用來買負債了,但是你把負債當成了資產。
如果你看過一些成功者早年的奮斗故事,你會聽到他們常會說到這樣一個詞:“第一桶金”。實際上,很多年輕人買房子首付的錢比這些人所說的“第一桶金”要多得多,為什么不可以拿這些錢去做更重要的事情呢?舉個例子,我在深圳,想明白這些之前也打算買房子,我看中的房子200萬,首付40萬,我打算好好奮斗2年然后就買。現在我覺悟了,我不會再干這種事,因為當我買下這個房子后,我即將背負160萬的負債,這些負債足以壓得我難有翻身之日,我將沒有太多的錢去購買資產。那么這40萬去做什么好呢?舉個例子,我家鄉西安的房產泡沫現象不大,而高新區很多白領需要租住房間,40萬足夠買兩套單身公寓,而房子從長遠來看是會升值的,那么我就在西安高新區買兩套單身公寓然后拿去出租就好了。每套月租1200塊,一個月有2400塊的收入,這就是上面所列的資產收入了。但是投資公寓并不一定好,因為它的投資回報率并不高,但是一旦我需要用這筆錢,公寓可以隨時賣掉。變富的途徑就是不斷地買入資產。
有人肯定會說,那照這樣看來,除非一次付清,不然房子永遠都不用買了,因為只要自住,就要產生負債。這種情況可以簡單的用對沖來解決,對沖的方式就是用你的資產收入去對沖你的負債,也就是說,當你的資產達到一定數目,你的資產收入就可以抵消你的正常支出和負債支出。一旦到了這個時候,你甚至不需要再去工作,也不再有所恐懼(記得資產不需要你參與)。
賺錢和幸福感
我們不是為了賺錢而工作、投資,我們的最終目的只有一個:提升我們的幸福感。那么什么是幸福感呢?幸福感是一個比例,它的分子是“你已經擁有的東西”,分母是“你想要擁有的東西”,所以,提升幸福感有兩個途徑,一個是提高分子,那就是得到自己想得到的東西;還有一個就是降低分母,也就是降低自己的目標和要求。上面的所有內容都是在告訴你如何去賺錢,但是忽略了幸福感,比如說,你想買輛車,但是因為你知道買車是負債,所以你不去買(幸福感分子小),但是你又很想要(幸福感分母大),所以你不快樂。面臨這種情況時你就需要做出一個權衡:究竟是增大投資減少負債降低幸福感呢?還是減少投資增大負債提升幸福感?這就看你更看重哪一個方面了。
http://service.bbs.163.com/bbs/tyro/290320725.html