剛入門的有關編程學生,可以通過寫什麼比較大的項目提高自己的綜合能力?

我是一個大一的計算機相關的學生,去年剛學習了半年c語言,知道了一些基本的東西,今年在學習數據結構,對於編程有濃厚的興趣。寫代碼給我帶來很大的成就感和樂趣。

在去年學習C語言時候,因為感興趣,就長期的寫了一個書本上提到的圖書管理的系統,在實際編寫過程中學到了很多東西,了解了很多問題,對我受益匪淺。

所以我想今年再寫一個自身能力範圍內可以提升自己綜合能力的項目。但是卻不知道寫什麼與從何寫起。希望能得到一點建議,謝謝。


寫個個人博客

寫個可以搜索的博客

寫個帶登錄的博客

寫個多人可用的博客

寫個可以評論的博客

寫個可以多種設備友好適配的博客

寫個可以換膚的博客

光把這一類弄利索,夠你玩兒到明年。


贊同 @劉鑫 的說法,寫博客是一個快速增強技能的方法。在那篇《聽我說說我的博客: 月訪問量過萬的個人IT博客的技術史》,我說到了我博客的技術進化史。

從我開始寫這個博客到現在已經有五年了吧。五年間,我在不斷實踐一些新技術,並且不斷地將新的技術yeit到我的博客上。

現在,我的博客是如何工作的?

HTTP伺服器

當你開發在網頁上訪問我的博客的時候,你可能會注意到上面的協議是HTTPS

但是並不會察覺到它是HTTP2.0。而這需要一個可以支持HTTP2.0的HTTP伺服器,在不改變現在程序配置的情況下,你需要重新編譯你的HTTP伺服器。在這裡,我的博客用的是Nginx,所以它在還只是試驗版的時候,就已經被編譯進去了。為了隱藏伺服器的版本,還需要在編譯的時候做了些手腳。除此,為了瀏覽器上的那個小綠鎖,我們還需要一個HTTPS證書,並在Nginx上配置它。

在這時,我們還需要配置一個緩存伺服器。過去,我在上面用過Varinsh、Nginx Cache。儘管對於個人博客來說,可能意義不是很大,但是總需要去嘗試。於是用到了ngx_pagespeed,它會幫我們做很多事,從合併CSS、JS,到轉圖片轉為webp格式等等。

Nginx對請求轉發給了某個埠,就來到了WSGI。

WSGI

接著,我們就來到了Web伺服器網關介面——是為Python語言定義的Web伺服器和Web應用程序或框架之間的一種簡單而通用的介面。現在,你或許已經知道了這個博客是基於Python語言的框架。但是在我們揭曉這個答案之前,我們還需要介紹個小工具——New Relic。如果你在Chrome瀏覽器上使用Ghosty插件,你就會看到下面的東西。

New Relic是一個網站監測工具,Google Analytics是一個分析工具。但是,不一樣的是New Relic需要在我們啟動的時候加進去:

nohup /PATH/bin/newrelic-admin run-program /PATH/bin/gunicorn --workers=2 MK_dream.wsgi -b 0.0.0.0:8080 --timeout=300amp;

現在這個請求總算來到了8080埠,接著到了Gunicorn的世界裡,它是一個高效的Python WSGI Server。

過了上面幾步這個請求終於交給了Django。

Django

Django這個天生帶Admin的Web框架,就是適合CMS和博客。這並不意味著它的工作範圍只限於此,它還有這麼多用戶:

請求先到了Django的URL層,這個請求接著交給了View層來處理,View層訪問Model層以後,與Template層一起渲染出了HTML。Django是一個MTV框架(類似於MVC之於Spring MVC)。接著,HTML先給了瀏覽器,瀏覽器繼續去請求前端的內容。

它也可以用Farbic部署哦~~。

Angluar Material Design Lite vs Bootstrap jQuery Mobile

這是一個現代瀏覽器的前端戰爭。最開始,博客的前端是Bootstrap框架主導的UI,而移動端是jQuery Mobile做的(PS: Mezzanine框架原先的結構)。

接著,在我遇到了Backbone後,響應了下Martin Folwer的編輯-發布分離模式。用Node.js與RESTify直接讀取博客的資料庫做了一個REST API。Backbone就負責了相應的Detail頁和List頁的處理。

儘管這樣做的方式可以讓用戶訪問的速度更快,但是我相信沒有一個用戶會一次性的把技術博客看完。而且我博客流量的主要來源是Google和百度。

然後,我試著用Angular去寫一些比較特殊的頁面,如全部文章。但是重寫的過程並不是很順暢,這意味著我需要重新考慮頁面的渲染方式。

最後,出現了Material Design Lite,也就是現在這個醜醜的頁面,還不兼容新IE(微信瀏覽器)。

作為一個技術博客,它也用到了HighLight.js的語法加亮。

API

在構建SPA的時候,做了一些API,然後就有了一個Auto Sugget的功能:

或者說,它是一個Auto Complete,可以直接藉助於jQuery AutoComplete插件。

或許你已經猜到了,既然我們已經有博客詳情頁和列表頁的API,並且我們也已經有了Auto Suggestion API。那麼,我們就可以有一個APP了。

APP

偶然間發現了Ionic框架,它等於 = Angluar + Cordova。於是,在測試Google Indexing的時候,花了一個晚上做了博客的APP。

我們可以在上面做搜索,搜索的時候也會有Auto Suggestion。上面的註銷意味著它有登錄功能,而Hybird App的登錄通常可以借用於JSON Web Token。即在第一次登錄的時候生成一個Token,之後的請求,如發博客、創建事件,都可以用這個Token來進行,直到Token過期。如果你是第一次在手機上訪問,也許你會遇到這個沒有節操的廣告:

然並卵,作為我的第七個Hybird應用,它只發布在Google Play上——因為不需要審核。

隨後,我意識到了我需要將我的博客推送給讀者,但是需要一個渠道。

微信公眾平台

藉助於Wechat-Python-SDK,花了一個下午做了一個基礎的公眾平台。除了可以查詢最新的博客和搜索,它的主要作用就是讓我發我的博客了。

http://weixin.qq.com/r/mnVYQHrEVicprT4j9yCI (二維碼自動識別)

對了,如果你用Python寫代碼,可以試試PyCharm。除了WebStorm以外,我最喜歡的IDE。因為WebStorm一直在與時俱進。

技術組成

So,在這個博客里會有三個用戶來源,Web &> 公眾號 &> App

在網頁上,每天大概會400個PV,其中大部分是來自Google、百度,接著就是偶爾推送的公眾號,最後就是只有我一個人用的APP。。。

伺服器:

  1. Nginx(含Nginx HTTP 2.0、PageSpeed 插件)
  2. Gunicorn(2 Workers)
  3. New Relic(性能監測)

DevOps:

  1. Farbic(自動部署)

Web應用後台:

  1. Mezzaine(基於Django的CMS)
  2. REST Framework (API)
  3. REST Framework JWT (JSON Web Token)
  4. Wechat Python SDK
  5. Mezzanine Pagedown (Markdown

Web應用前台:

  1. Material Design Lite (用戶)
  2. BootStrap (後台)
  3. jQuery + jQuery.autocomplete + jquery.githubRepoWidget
  4. HighLight.js
  5. Angluar.js
  6. Backbone (已不維護)

移動端:

  1. Ionic
  2. Angular + ngCordova
  3. Cordova
  4. highlightjs
  5. showdown.js(Markdown Render)
  6. Angular Messages + Angular-elastic

微信端:

  1. Wechat-Python-SDK

以上是我博客的所有技術棧。。。


題主才大一是吧,真心奉勸一句,別整天想著大項目大項目,在還是學生階段的時候,把基礎打好是很重要的,數據結構演算法,操作系統,資料庫啥的基本功很重要。項目實戰你以後總會遇到的,但是反過來你畢業以後,你絕對沒時間再去補數據結構啊,操作系統啊這些基本知識了,但是這些基本功才是將來限制你的瓶頸……千萬不要像答主現在這樣,寫個紅黑樹還得先去百度一下……


如果我現在再讀一次大一的話…我會放棄所有的編程課(其實我本來就沒怎麼去過…)但是一定會把數學學好…甚至可能會轉數學系…尤其是高數線代概率統計…

編程方面我感覺什麼時候都能補…數學一旦落下了到用的時候太難撿起來了…


其實可以做獨立遊戲。舉例微觀戰爭。就是兩個大學生寫的動作Moba,質量還不錯。在這個過程中至少積累的UI,戰鬥,數值等等各種系統的實現方法和一些初步的網路邏輯實現方法。自然而然會有一種系統的思維去考慮一個遊戲應該有哪些部分代碼邏輯怎樣組織種種問題。


多動手就行,可以找地方多練練。


我個人覺得,寫爬蟲既適合練手,又適合不斷演化。

多線程,IO,資料庫,解釋器,HTTP協議都有涉及,

設計模式,緩存,隊列,分散式計算與存儲,數據清洗等等都可以用上。


類似petshop的來一個


剛入門就寫大項目?大一不應該做題打比賽么?


實用一點的要不試試寫個商城系統?涉及到會員管理,商品管理,訂單管理。不知道是否超出你的能力範圍了


推薦閱讀:

非程序員適合學習哪些編程知識?
怎麼學C語言?
零基礎如何自學編程成為一名程序員,有哪些書推薦?
35歲,女,目前沒有明確目的,從零開始學編程會不會浪費?

TAG:編程 | 程序 | 編程學習 | 編程入門 | 自學編程 |