1.golang读åè¶
大excelï¼
2.要成为一名专业的源码s源程序员,从零开始需要怎么一步步来比较好,码分要把最底层的源码s源先学精通吗?(个人认为)求学长
golang读åè¶ å¤§excelï¼
Golang-tealeg/xlsxæä½excelæ件
åè§?
å表æ¶å¨å¾ªç¯ä¸çcell
åºè¯¥æ°å£°æçåévarcell1*xlsx.Cellå§
ç¶åä¸é¢ç¨cell1åéåå¼
ä¸ç¶å¥½ååä¸è¿å»
使ç¨çæ¹æ³ï¼sheet.SetColWidth(1,1,.0)
//Setthewidthofarangeofcolumns.
//minå¼å§çåï¼maxç»æçå
//eg:ï¼1,1,ï¼ç¬¬ä¸è¡è®¾ç½®ä¸º
//?ï¼1,3,ï¼ç¬¬ä¸è¡å°ç¬¬ä¸è¡è®¾ç½®ä¸º
//éè¿è®¾ç½®å¤æ¡ï¼è¾¾å°è®¾ç½®å ¨é¨åç宽度çç®ç
func(s*Sheet)SetColWidth(min,maxint,widthfloat)
å¦
golangæä¹éè¿æ°æ®æµç´æ¥çæexcelä¸ä¼ è³ossimportjava.io.*;importjxl.*;â¦â¦â¦â¦try{ //æ建Workbook对象,åªè¯»Workbook对象//ç´æ¥ä»æ¬å°æ件å建Workbook//ä»è¾å ¥æµå建WorkbookInputStreamis=newFileInputStream(sourcefile);jxl.Workbookrwb=Workbook.getWorkbook(is);}catch(Exceptione){ e.printStackTrace();}ä¸æ¦å建äºWorkbookï¼æ们就å¯ä»¥éè¿å®æ¥è®¿é®ExcelSheet(æ¯è¯ï¼å·¥ä½è¡¨)ãåèä¸é¢ç代ç ç段ï¼//è·å第ä¸å¼ Sheet表Sheetrs=rwb.getSheet(0);æ们æ¢å¯è½éè¿Sheetçå称æ¥è®¿é®å®ï¼ä¹å¯ä»¥éè¿ä¸æ æ¥è®¿é®å®ãå¦æéè¿ä¸æ æ¥è®¿é®çè¯ï¼è¦æ³¨æçä¸ç¹æ¯ä¸æ ä»0å¼å§ï¼å°±åæ°ç»ä¸æ ·ãä¸æ¦å¾å°äºSheetï¼æ们就å¯ä»¥éè¿å®æ¥è®¿é®ExcelCell(æ¯è¯ï¼åå æ ¼)ãåèä¸é¢ç代ç ç段ï¼//è·å第ä¸è¡ï¼ç¬¬ä¸åçå¼Cellc=rs.getCell(0,0);Stringstrc=c.getContents();//è·å第ä¸è¡ï¼ç¬¬äºåçå¼Cellc=rs.getCell(1,0);Stringstrc=c.getContents();//è·å第äºè¡ï¼ç¬¬äºåçå¼Cellc=rs.getCell(1,1);Stringstrc=c.getContents();System.out.println("Cell(0,0)"+"value:"+strc+";type:"+c.getType());System.out.println("Cell(1,0)"+"value:"+strc+";type:"+c.getType());System.out.println("Cell(1,1)"+"value:"+strc+";type:"+c.getType());å¦æä» ä» æ¯åå¾Cellçå¼ï¼æ们å¯ä»¥æ¹ä¾¿å°éè¿getContents()æ¹æ³ï¼å®å¯ä»¥å°ä»»ä½ç±»åçCellå¼é½ä½ä¸ºä¸ä¸ªå符串è¿åã示ä¾ä»£ç ä¸Cell(0,0)æ¯ææ¬åï¼Cell(1,0)æ¯æ°ååï¼Cell(1,1)æ¯æ¥æåï¼éè¿getContents()ï¼ä¸ç§ç±»åçè¿åå¼é½æ¯å符åãå¦ææéè¦ç¥éCellå 容çç¡®åç±»åï¼APIä¹æä¾äºä¸ç³»åçæ¹æ³ãåèä¸é¢ç代ç ç段ï¼Stringstrc=null;doublestrc=0.;Datestrc=null;Cellc=rs.getCell(0,0);Cellc=rs.getCell(1,0);Cellc=rs.getCell(1,1);if(c.getType()==CellType.LABEL){ LabelCelllabelc=(LabelCell)c;strc=labelc.getString();}if(c.getType()==CellType.NUMBER){ NmberCellnumc=(NumberCell)c;strc=numc.getValue();}if(c.getType()==CellType.DATE){ DateCelldatec=(DateCell)c;strc=datec.getDate();}System.out.println("Cell(0,0)"+"value:"+strc+";type:"+c.getType());System.out.println("Cell(1,0)"+"value:"+strc+";type:"+c.getType());System.out.println("Cell(1,1)"+"value:"+strc+";type:"+c.getType());å¨å¾å°Cell对象åï¼éè¿getType()æ¹æ³å¯ä»¥è·å¾è¯¥åå æ ¼çç±»åï¼ç¶åä¸APIæä¾çåºæ¬ç±»åç¸å¹é ï¼å¼ºå¶è½¬æ¢æç¸åºçç±»åï¼æåè°ç¨ç¸åºçåå¼æ¹æ³getXXX()ï¼å°±å¯ä»¥å¾å°ç¡®å®ç±»åçå¼ãAPIæä¾äºä»¥ä¸åºæ¬ç±»åï¼ä¸Excelçæ°æ®æ ¼å¼ç¸å¯¹åºï¼å¦ä¸å¾æ示ï¼æ¯ç§ç±»åçå ·ä½æä¹ï¼è¯·åè§JavaExcelAPIDocumentãå½ä½ å®æ对Excelçµåè¡¨æ ¼æ°æ®çå¤çåï¼ä¸å®è¦ä½¿ç¨close()æ¹æ³æ¥å ³éå åå建ç对象ï¼ä»¥éæ¾è¯»åæ°æ®è¡¨çè¿ç¨ä¸æå ç¨çå å空é´ï¼å¨è¯»å大éæ°æ®æ¶æ¾å¾å°¤ä¸ºéè¦ãåèå¦ä¸ä»£ç ç段ï¼//æä½å®ææ¶ï¼å ³é对象ï¼éæ¾å ç¨çå å空é´rwb.close();JavaExcelAPIæä¾äºè®¸å¤è®¿é®Excelæ°æ®è¡¨çæ¹æ³ï¼å¨è¿éæåªç®è¦å°ä»ç»å 个常ç¨çæ¹æ³ï¼å ¶å®çæ¹æ³è¯·åèéå½ä¸çJavaExcelAPIDocumentã?Workbookç±»æä¾çæ¹æ³1.intgetNumberOfSheets()è·å¾å·¥ä½èï¼Workbookï¼ä¸å·¥ä½è¡¨ï¼Sheetï¼ç个æ°ï¼ç¤ºä¾ï¼jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));intsheets=rwb.getNumberOfSheets();2.Sheet[]getSheets()è¿åå·¥ä½èï¼Workbookï¼ä¸å·¥ä½è¡¨ï¼Sheetï¼å¯¹è±¡æ°ç»ï¼ç¤ºä¾ï¼jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));Sheet[]sheets=rwb.getSheets();3.StringgetVersion()è¿åæ£å¨ä½¿ç¨çAPIççæ¬å·ï¼å¥½åæ¯æ²¡ä»ä¹å¤ªå¤§çä½ç¨ãjxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));StringapiVersion=rwb.getVersion();?Sheetæ¥å£æä¾çæ¹æ³1.StringgetName()è·åSheetçå称ï¼ç¤ºä¾ï¼jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));jxl.Sheetrs=rwb.getSheet(0);StringsheetName=rs.getName();2.intgetColumns()è·åSheet表ä¸æå å«çæ»åæ°ï¼ç¤ºä¾ï¼jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));jxl.Sheetrs=rwb.getSheet(0);intrsColumns=rs.getColumns();3.Cell[]getColumn(intcolumn)è·åæä¸åçææåå æ ¼ï¼è¿åçæ¯åå æ ¼å¯¹è±¡æ°ç»ï¼ç¤ºä¾ï¼jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));jxl.Sheetrs=rwb.getSheet(0);Cell[]cell=rs.getColumn(0);4.intgetRows()è·åSheet表ä¸æå å«çæ»è¡æ°ï¼ç¤ºä¾ï¼jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));jxl.Sheetrs=rwb.getSheet(0);intrsRows=rs.getRows();5.Cell[]getRow(introw)è·åæä¸è¡çææåå æ ¼ï¼è¿åçæ¯åå æ ¼å¯¹è±¡æ°ç»ï¼ç¤ºä¾åï¼jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));jxl.Sheetrs=rwb.getSheet(0);Cell[]cell=rs.getRow(0);6.CellgetCell(intcolumn,introw)è·åæå®åå æ ¼ç对象å¼ç¨ï¼éè¦æ³¨æçæ¯å®ç两个åæ°ï¼ç¬¬ä¸ä¸ªæ¯åæ°ï¼ç¬¬äºä¸ªæ¯è¡æ°ï¼è¿ä¸é常çè¡ãåç»åæäºä¸åãjxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));jxl.Sheetrs=rwb.getSheet(0);Cellcell=rs.getCell(0,0);çææ°çExcelå·¥ä½èä¸é¢ç代ç 主è¦æ¯å大家ä»ç»å¦ä½çæç®åçExcelå·¥ä½è¡¨ï¼å¨è¿éåå æ ¼çå 容æ¯ä¸å¸¦ä»»ä½ä¿®é¥°ç(å¦ï¼åä½ï¼é¢è²çç)ï¼ææçå 容é½ä½ä¸ºå符串åå ¥ã(å®æ´ä»£ç è§ExcelWriting.java)ä¸è¯»åExcelå·¥ä½è¡¨ç¸ä¼¼ï¼é¦å è¦ä½¿ç¨Workbookç±»çå·¥åæ¹æ³å建ä¸ä¸ªå¯åå ¥çå·¥ä½è(Workbook)对象ï¼è¿éè¦æ³¨æçæ¯ï¼åªè½éè¿APIæä¾çå·¥åæ¹æ³æ¥å建Workbookï¼èä¸è½ä½¿ç¨WritableWorkbookçæé å½æ°ï¼å 为类WritableWorkbookçæé å½æ°ä¸ºprotectedç±»åã示ä¾ä»£ç ç段å¦ä¸ï¼importjava.io.*;importjxl.*;importjxl.write.*;â¦â¦â¦â¦try{ //æ建Workbook对象,åªè¯»Workbook对象//Method1ï¼å建å¯åå ¥çExcelå·¥ä½èjxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile(targetfile));//Method2ï¼å°WritableWorkbookç´æ¥åå ¥å°è¾åºæµ/*OutputStreamos=newFileOutputStream(targetfile);jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(os);*/}catch(Exceptione){ e.printStackTrace();}APIæä¾äºä¸¤ç§æ¹å¼æ¥å¤çå¯åå ¥çè¾åºæµï¼ä¸ç§æ¯ç´æ¥çææ¬å°æ件ï¼å¦ææ件åä¸å¸¦å ¨è·¯å¾çè¯ï¼ç¼ºççæ件ä¼å®ä½å¨å½åç®å½ï¼å¦ææ件å带æå ¨è·¯å¾çè¯ï¼åçæçExcelæ件åä¼å®ä½å¨ç¸åºçç®å½ï¼å¦å¤ä¸ç§æ¯å°Excel对象ç´æ¥åå ¥å°è¾åºæµï¼ä¾å¦ï¼ç¨æ·éè¿æµè§å¨æ¥è®¿é®Webæå¡å¨ï¼å¦æHTTP头设置æ£ç¡®çè¯ï¼æµè§å¨èªå¨è°ç¨å®¢æ·ç«¯çExcelåºç¨ç¨åºï¼æ¥æ¾ç¤ºå¨æçæçExcelçµåè¡¨æ ¼ãæ¥ä¸æ¥å°±æ¯è¦å建工ä½è¡¨ï¼å建工ä½è¡¨çæ¹æ³ä¸å建工ä½èçæ¹æ³å ä¹ä¸æ ·ï¼åæ ·æ¯éè¿å·¥å模å¼æ¹æ³è·å¾ç¸åºç对象ï¼è¯¥æ¹æ³éè¦ä¸¤ä¸ªåæ°ï¼ä¸ä¸ªæ¯å·¥ä½è¡¨çå称ï¼å¦ä¸ä¸ªæ¯å·¥ä½è¡¨å¨å·¥ä½èä¸çä½ç½®ï¼åèä¸é¢ç代ç ç段ï¼//å建Excelå·¥ä½è¡¨jxl.write.WritableSheetws=wwb.createSheet("TestSheet1",0);"è¿é ä¹æ¯å¥½äºï¼ææä¹åå¤é½å ¨äºï¼å¯ä»¥å¼å§ä¸é äºï¼"ï¼ç°å¨è¦åçåªæ¯å®ä¾åAPIææä¾çExcelåºæ¬æ°æ®ç±»åï¼å¹¶å°å®ä»¬æ·»å å°å·¥ä½è¡¨ä¸å°±å¯ä»¥äºï¼åèä¸é¢ç代ç ç段ï¼//1.æ·»å Label对象jxl.write.LabellabelC=newjxl.write.Label(0,0,"ThisisaLabelcell");ws.addCell(labelC);//æ·»å 带æååFormattingç对象jxl.write.WritableFontwf=newjxl.write.WritableFont(WritableFont.TIMES,,WritableFont.BOLD,true);jxl.write.WritableCellFormatwcfF=newjxl.write.WritableCellFormat(wf);jxl.write.LabellabelCF=newjxl.write.Label(1,0,"ThisisaLabelCell",wcfF);ws.addCell(labelCF);//æ·»å 带æåä½é¢è²Formattingç对象jxl.write.WritableFontwfc=newjxl.write.WritableFont(WritableFont.ARIAL,,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);jxl.write.WritableCellFormatwcfFC=newjxl.write.WritableCellFormat(wfc);jxl.write.LabellabelCFC=newjxl.write.Label(1,0,"ThisisaLabelCell",wcfFC);ws.addCell(labelCF);//2.æ·»å Number对象jxl.write.NumberlabelN=newjxl.write.Number(0,1,3.);ws.addCell(labelN);//æ·»å 带æformattingçNumber对象jxl.write.NumberFormatnf=newjxl.write.NumberFormat("#.##");jxl.write.WritableCellFormatwcfN=newjxl.write.WritableCellFormat(nf);jxl.write.NumberlabelNF=newjxl.write.Number(1,1,3.,wcfN);ws.addCell(labelNF);//3.æ·»å Boolean对象jxl.write.BooleanlabelB=newjxl.write.Boolean(0,2,false);ws.addCell(labelB);//4.æ·»å DateTime对象jxl.write.DateTimelabelDT=newjxl.write.DateTime(0,3,newjava.util.Date());ws.addCell(labelDT);//æ·»å 带æformattingçDateFormat对象jxl.write.DateFormatdf=newjxl.write.DateFormat("ddMMyyyyhh:mm:ss");jxl.write.WritableCellFormatwcfDF=newjxl.write.WritableCellFormat(df);jxl.write.DateTimelabelDTF=newjxl.write.DateTime(1,3,newjava.util.Date(),wcfDF);ws.addCell(labelDTF);è¿éæ两ç¹å¤§å®¶è¦å¼èµ·å¤§å®¶ç注æã第ä¸ç¹ï¼å¨æé åå æ ¼æ¶ï¼åå æ ¼å¨å·¥ä½è¡¨ä¸çä½ç½®å°±å·²ç»ç¡®å®äºãä¸æ¦å建åï¼åå æ ¼çä½ç½®æ¯ä¸è½å¤åæ´çï¼å°½ç®¡åå æ ¼çå 容æ¯å¯ä»¥æ¹åçã第äºç¹ï¼åå æ ¼çå®ä½æ¯æç §ä¸é¢è¿æ ·çè§å¾(column,row)ï¼èä¸ä¸æ é½æ¯ä»0å¼å§ï¼ä¾å¦ï¼A1被åå¨å¨(0,0)ï¼B1被åå¨å¨(1,0)ãæåï¼ä¸è¦å¿è®°å ³éæå¼çExcelå·¥ä½è对象ï¼ä»¥éæ¾å ç¨çå åï¼åè§ä¸é¢ç代ç ç段ï¼//åå ¥Exelå·¥ä½è¡¨wwb.write();//å ³éExcelå·¥ä½è对象wwb.close();è¿å¯è½ä¸è¯»åExcelæ件çæä½æå°å°ä¸åï¼å¨å ³éExcel对象ä¹åï¼ä½ å¿ é¡»è¦å è°ç¨write()æ¹æ³ï¼å 为å åçæä½é½æ¯åå¨å¨ç¼åä¸çï¼æ以è¦éè¿è¯¥æ¹æ³å°æä½çå 容ä¿åå¨æ件ä¸ãå¦æä½ å å ³éäºExcel对象ï¼é£ä¹åªè½å¾å°ä¸å¼ 空çå·¥ä½èäºãæ·è´ãæ´æ°Excelå·¥ä½èæ¥ä¸æ¥ç®è¦ä»ç»ä¸ä¸å¦ä½æ´æ°ä¸ä¸ªå·²ç»åå¨çå·¥ä½èï¼ä¸»è¦æ¯ä¸é¢äºæ¥æä½ï¼ç¬¬ä¸æ¥æ¯æé åªè¯»çExcelå·¥ä½èï¼ç¬¬äºæ¥æ¯å©ç¨å·²ç»å建çExcelå·¥ä½èå建æ°çå¯åå ¥çExcelå·¥ä½èï¼åèä¸é¢ç代ç ç段ï¼(å®æ´ä»£ç è§ExcelModifying.java)//å建åªè¯»çExcelå·¥ä½èç对象jxl.Workbookrw=jxl.Workbook.getWorkbook(newFile(sourcefile));//å建å¯åå ¥çExcelå·¥ä½è对象jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile(targetfile),rw);//读å第ä¸å¼ å·¥ä½è¡¨jxl.write.WritableSheetws=wwb.getSheet(0);//è·å¾ç¬¬ä¸ä¸ªåå æ ¼å¯¹è±¡jxl.write.WritableCellwc=ws.getWritableCell(0,0);//å¤æåå æ ¼çç±»å,ååºç¸åºç转åif(wc.getType()==CellType.LABEL){ Labell=(Label)wc;l.setString("Thevaluehasbeenmodified.");}//åå ¥Excel对象wwb.write();//å ³éå¯åå ¥çExcel对象wwb.close();//å ³éåªè¯»çExcel对象rw.close();ä¹æ以使ç¨è¿ç§æ¹å¼æ建Excel对象ï¼å®å ¨æ¯å 为æççåå ï¼å 为ä¸é¢ç示ä¾ææ¯APIç主è¦åºç¨ã为äºæé«æ§è½ï¼å¨è¯»åå·¥ä½è¡¨æ¶ï¼ä¸æ°æ®ç¸å ³çä¸äºè¾åºä¿¡æ¯ï¼ææçæ ¼å¼ä¿¡æ¯ï¼å¦ï¼åä½ãé¢è²ççï¼æ¯ä¸è¢«å¤ççï¼å 为æ们çç®çæ¯è·å¾è¡æ°æ®çå¼ï¼æ¢ä½¿æ²¡æäºä¿®é¥°ï¼ä¹ä¸ä¼å¯¹è¡æ°æ®çå¼äº§çä»ä¹å½±åãå¯ä¸çä¸å©ä¹å¤å°±æ¯ï¼å¨å åä¸ä¼åæ¶ä¿å两个åæ ·çå·¥ä½è¡¨ï¼è¿æ ·å½å·¥ä½è¡¨ä½ç§¯æ¯è¾å¤§æ¶ï¼ä¼å ç¨ç¸å½å¤§çå åï¼ä½ç°å¨å¥½åå åç大å°å¹¶ä¸æ¯ä»ä¹å ³é®å ç´ äºãä¸æ¦è·å¾äºå¯åå ¥çå·¥ä½è¡¨å¯¹è±¡ï¼æ们就å¯ä»¥å¯¹åå æ ¼å¯¹è±¡è¿è¡æ´æ°çæä½äºï¼å¨è¿éæ们ä¸å¿ è°ç¨APIæä¾çadd()æ¹æ³ï¼å 为åå æ ¼å·²ç»äºå·¥ä½è¡¨å½ä¸ï¼æ以æ们åªéè¦è°ç¨ç¸åºçsetXXX()æ¹æ³ï¼å°±å¯ä»¥å®ææ´æ°çæä½äºãå°½åå æ ¼åæçæ ¼å¼å修饰æ¯ä¸è½å»æçï¼æ们è¿æ¯å¯ä»¥å°æ°çåå æ ¼ä¿®é¥°å ä¸å»ï¼ä»¥ä½¿åå æ ¼çå 容以ä¸åçå½¢å¼è¡¨ç°ãæ°çæçå·¥ä½è¡¨å¯¹è±¡æ¯å¯åå ¥çï¼æ们é¤äºæ´æ°åæçåå æ ¼å¤ï¼è¿å¯ä»¥æ·»å æ°çåå æ ¼å°å·¥ä½è¡¨ä¸ï¼è¿ä¸ç¤ºä¾2çæä½æ¯å®å ¨ä¸æ ·çãæåï¼ä¸è¦å¿è®°è°ç¨write()æ¹æ³ï¼å°æ´æ°çå 容åå ¥å°æ件ä¸ï¼ç¶åå ³éå·¥ä½è对象ï¼è¿éæ两个工ä½è对象è¦å ³éï¼ä¸ä¸ªæ¯åªè¯»çï¼å¦å¤ä¸ä¸ªæ¯å¯åå ¥çãå°ç»æ¬æåªæ¯å¯¹JavaExcelAPIä¸å¸¸ç¨çæ¹æ³ä½äºä»ç»ï¼è¦æ³æ´è¯¦å°½å°äºè§£APIï¼è¯·å¤§å®¶åèAPIææ¡£ï¼ææºä»£ç ãJavaExcelAPIæ¯ä¸ä¸ªå¼æ¾æºç 项ç®ï¼è¯·å¤§å®¶å ³æ³¨å®çææ°è¿å±ï¼æå ´è¶£çæåä¹å¯ä»¥ç³è¯·å å ¥è¿ä¸ªé¡¹ç®ï¼æè æ¯æåºå®è´µçæè§ã
Golangæä½xlsxæ件github.com/cuishu/excelæ¯ç¨æ¥è¾ å©æä½xlsxæ件çåºï¼å®ç°äºxlsxæ件ågo对象çæ å°ï¼ä½¿æä½xlsxæ件å¦åæä½go对象ä¸æ ·ç®åã
ä¾èµgithub.com/EntSecGroup-Skylar/excelize/v2
excelæ件ç第ä¸è¡å¿ é¡»åGostructçtagä¸è´
Forexample
æ°å»ºä¸ä¸ªæ件ï¼å为a.xlsx
Sheet1ç»æå¦ä¸
读åSheet
å°gosliceåå ¥excelæ件
æ¯æçæ°æ®ç±»å
å¦ææ件æä¸æ¢ä¸ä¸ªSheetï¼åºè¯¥ä½¿ç¨ä¸ä¸ªç»ææ¥æ å°å®ä»¬ã
ä¾
æ¨å¯ä»¥ä½¿ç¨èªå®ä¹ç±»åæ¥å®ç°MarshalXLSXåUnmarshalXLSXæ¥å®ç°ç±»å转æ¢ã
ä¾
要成为一名专业的程序员,从零开始需要怎么一步步来比较好,码分要把最底层的源码s源先学精通吗?(个人认为)求学长
前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,码分网站加用户源码不如从工作中的源码s源需求出发)
建议:
不要乱买书,不要乱追新技术新名词,码分基础的源码s源东西经过很长时间积累而且还会在未来至少年通用。
回顾一下历史,码分看看历史上时间线上技术的源码s源发展,你才能明白明天会是码分什么样。
一定要动手,源码s源例子不管多么简单,码分建议至少自己手敲一遍看看是源码s源否理解了里头的细枝末节。
一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。酷客多 源码
注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:
现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。
越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。
微软的lolge脚本源码东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》
所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。
启蒙入门
1、 学习一门脚本语言,例如Python/Ruby
可以让你摆脱对底层语言的如何防止源码外泄恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:
处理文本文件,或者csv (关键词 python csv, python open, python sys) 读一个本地文件,逐行处理(例如 word count,或者处理log)
遍历本地文件系统 (sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果
跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量
学会用各种print之类简单粗暴的方式进行调试
学会用Google (phrase, domain, use reader to follow tech blogs)
为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是快手热门源码脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。
2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。
Source Insight (或 ctag)
使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。
3、 熟悉Unix/Linux Shell和常见的命令行
如果你用windows,至少学会用虚拟机里的linux, vmware player是免费的,装个Ubuntu吧
一定要少用少用图形界面。
学会使用man来查看帮助
文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
学会使用一些文本操作命令 sed/awk/grep/tail/less/more …
学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…
了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
了解正则表达式,使用正则表达式来查找文件。
对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。
4、 学习Web基础(HTML/CSS/JS) + 服务器端技术 (LAMP)
未来必然是Web的世界,学习WEB基础的最佳网站是W3School。
学习HTML基本语法
学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
学会用 Firefox + Firebug 或 chrome 查看你觉得很炫的网页结构,并动态修改。
学习使用Javascript操纵HTML元件。理解DOM和动态网页(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 网上有免费的章节,足够用了。或参看 DOM 。
学会用 Firefox + Firebug 或 chrome 调试Javascript代码(设置断点,查看变量,性能,控制台等)
在一台机器上配置Apache 或 Nginx
学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
跟完一个名校的网络编程课程(例如:(升级版为Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。