Skip to content

Latest commit

 

History

History
1252 lines (890 loc) · 57 KB

programming-language-resources.md

File metadata and controls

1252 lines (890 loc) · 57 KB

Programming Language Resources

The only way to learn a new programming language is by writing programs in it. — Dennis Ritchie

Content



Operating-System & Performance

C

Primary

  • The C Programming Language (2nd, 1988) by Brian W. Kernighan, Denis M. Ritchie (TCPL)
  • C Primer Plus (6th, 2013) by Stephen Prata
  • C-FAQ. comp.lang.c Frequently Asked Questions

Style Guide

Project Structure

Modern C

  • Modern C for Absolute Beginners: A Friendly Introduction to the C Programming Language (2021) by Slobodan Dmitrović

Advanced

  • Pointers on C (1997) by Kenneth A·Reek
  • Expert C Programming: Deep C Secrets (1994) by Peter van der Linden
  • C Traps and Pitfalls (1989) by Andrew Koenig
  • Effective C: An Introduction to Professional C Programming (2020) by Robert C. Seacord
  • Fluent C: Principles, Practices, and Patterns (2022) by Christopher Preschern

C++

Primary

Introductory, no previous programming experience

  • C++ Primer (5th, 2012) by Josée Lajoie and Stanley B. Lippman
  • Programming: Principles and Practice Using C++ by Bjarne Stroustrup

Introductory, with previous programming experience

  • A Tour of C++ (3rd, 2022) by Bjarne Stroustrup
  • Accelerated C++: Practical Programming by Example by Andrew Koenig
  • Essential C++ by Stanley B. Lippman

Style Guide

Project Structure

Modern C++

  • Modern C++ for Absolute Beginners: A Friendly Introduction to the C++ Programming Language and C++11 to C++23 Standards (2nd, 2023) by Slobodan Dmitrović
  • Modern C++ Programming Cookbook: Master C++ core language and standard library features, with over 100 recipes, updated to C++20 (2nd, 2020) by Marius Bancila
  • 现代 C++ 教程:高速上手 C++ 11/14/17/20 (2nd) by 欧长坤 eBook

Best practices

  • Effective C++ (3rd, 2005) by Scott Meyers
  • Effective Modern C++ (2014) by Scott Meyers
  • Effective STL (2001) by Scott Meyers
  • C++ Core Guidelines by Bjarne Stroustrup and Herb Sutter

Intermediate

  • More Effective C++ (1996) by Scott Meyers
  • Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions by Herb Sutter
  • More Exceptional C++ by Herb Sutter
  • Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions by Herb Sutter
  • C++ Coding Standards: 101 Rules, Guidelines, and Best Practices by Herb Sutter, Andrei Alexandrescu
  • C++ Templates: The Complete Guide by David Vandevoorde, Nicolai M. Josuttis
  • C++ 17 The Complete Guide by Nicolai M. Josuttis
  • C++ In Action: Industrial Strength Programming Techniques by Bartosz Milewski
  • Functional Programming in C++ by Ivan Čukić
  • Professional C++ by Marc Gregoire, Nicholas A. Solter, Scott J. Kleper

Advanced

  • Dive into
    • Modern C++ Design: Generic Programming and Design Patterns Applied by Andrei Alexandrescu, Scott Meyers, John Vlissides
    • C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond by David Abrahams, Aleksey Gurtovoy
    • Advanced C++ Metaprogramming by Davide Di Gennaro
    • Large-Scale C++ Volume I: Process and Architecture by John S. Lakos
    • The C++ Standard Library (2nd, 2012) by Nikolai Josuttis
    • STL源码剖析 by 侯捷
  • Concurrency
    • C++ Concurrency in Action: Practical Multithreading by Anthony Williams
  • Network
    • C++ Network Programming, Volume I: Mastering Complexity with ACE and Patterns by Douglas C. Schmidt, Stephen D. Huston
    • C++ Network Programming, Volume 2: Systematic Reuse with Ace and Frameworks by Douglas C. Schmidt, Stephen D. Huston
  • Efficient
    • C++ High Performance: Master the art of optimizing the functioning of your C++ code (2nd, 2020) by Bjorn Andrist, Viktor Sehr
    • The Art of Writing Efficient Programs: An advanced programmer's guide to efficient hardware utilization and compiler optimizations using C++ examples by Fedor G. Pikus

Reference Style - All Levels

Classics / Older

  • The Design and Evolution of C++ by Bjarne Stroustrup
  • Ruminations on C++: A Decade of Programming Insight and Experience by Andrew Koenig, Barbara E. Moo
  • Advanced C++ Programming Styles and Idioms by James O. Coplien
  • Large-Scale C++ Software Design (1996) by John Lakos
  • Inside the C++ Object Model (1996) by Stanley B. Lippman
  • Thinking in C++, Vol. 1: Introduction to Standard C++ (2nd, 2000) by Bruce Eckel
  • Thinking in C++, Volume 2: Practical Programming by Bruce Eckel and Chuck Allison
  • Scientific and Engineering C++: An Introduction with Advanced Techniques and Examples by John J. Barton
  • Generic Programming and the STL: Using and Extending the C++ Standard Template Library by Matthew H. Austern

Courses

  • C++面向对象开发 by 侯捷
  • STL 标准库与泛型编程 by 侯捷
  • C++新标准 C++11/14 by 侯捷
  • C++ 内存管理机制 by 侯捷
  • C++ Startup 揭秘 by 侯捷

Web Frameworks

  • Crow - Fast and easy. Microframework.
  • Oat++ - Highly scalable and resource-efficient.
  • Drogon - Fast.
  • POCO - Simple.

Tools

  • IDE: CLion, Visual Studio Code
  • Package Management: Conan

Directions

C/C++的大体方向

主要方向:

  1. 图形图像/QT。
  2. 音视频。实际上也是要分开,比如音频主要代表的有声网,科大讯飞等。
  3. 网络。虚拟化,网络安全等。
  4. 功能开发。一些原来是 C/C++架构的成熟产品,迭代开发。
  5. 嵌入式。嵌入式分得领域非常多,存储,单片机,车载,机械。
  6. 医疗。医疗可以单独拿出来,算一个分类。
  7. 金融。要求高,不好进。
  8. 游戏。游戏分前端 u3d 之类,与图形图像有关联。服务器后端,主要就是高并发网络通信,与金融相关。

C++ 不像 Java 那样 Spring 技术框架一统天下。意思就是方向非常专一,同样是 C++,你在某个圈子深耕三年,换个方向相当于从零开始。

C++ 不是特殊场景,一般不会用它。1. 它太难掌握,对开发要求高,出一个难以复现的问题,定位解决起来半年都是可能的。2. 因为1的原因,变相的导致对开发人员素质要求高,从而推高用人成本高,同时开发效率和稳定性也不如 java 尤其是脚本语言,从公司运营成本角度,就没有意愿选择 C++。

目前坑位多的就是 QT 客户端,音视频,服务器。再者就是嵌入式,偏硬件。高阶的就是存储,量化。高阶的没经验肯定是进不去的。C++没三五年经验可以说是语法都掌握不全。

就业方面,现在大中小公司能不用 C++,他们是绝对不用 C++的,所以坑位最多的 QT 客户端份额逐渐被套壳 js 侵蚀,坑位越来越少。

建议:

图形图像算是不错的一个分类。

游戏,建议不要入。1. 因为太累,版本更新,熬夜加班太正常了。2. 游戏和金融一样,压力大,服务器一秒钟都不能停,有 bug ,一群人盯着不断问。3. 游戏行业并不是需求大的方向,头部效应非常明显,底下的完全喝不到汤。

Rust

Primary

  • Documentation
  • Online Tutorials
  • The Rust Programming Language (2nd, 2023) by Carol Nichols and Steve Klabnik
  • Rust for Rustaceans: Idiomatic Programming for Experienced Developers (2021) by Jon Gjengset
  • Programming Rust: Fast, Safe Systems Development (2021) by Jason Orendorff and Jim Blandy
  • Command-Line Rust: A Project-Based Primer for Writing Rust CLIs by Ken Youens-Clark
  • Rust Programming By Example: Enter the World of Rust by Building Engaging, Concurrent, Reactive, and Robust Applications by Antoni Boucher and Guillaume Gomez
  • Rust in Action by Tim McNamara

Style Guide

Project Structure

Advanced

  • Concurrency
    • Rust Atomics and Locks: Low-Level Concurrency in Practice (2023) by Mara Bos
    • Hands-On Concurrency with Rust: Confidently Build Memory-Safe, Parallel, and Efficient Software in Rust by Brian L Troutwine

Application Development

  • Zero To Production In Rust: An introduction to backend development (2022) by Luca Palmieri
  • Programming WebAssembly with Rust: Unified Development for Web, Mobile, and Embedded Applications by Kevin Hoffman

Web Frameworks

Tools

  • IDE: RustRover, Visual Studio Code
  • Package Management: Cargo

Infrastructure & Balanced

Go 📈

Guidance & Roadmap

Primary

Style Guide

Advanced

  • Go Cookbook: Expert Solutions for Commonly Needed Go Tasks (2023) by Sau Sheong Chang
  • Mastering Go: Leverage Go's expertise for advanced utilities, empowering you to develop professional software (4th, 2024) by Mihalis Tsoukalos
  • Go for DevOps: Learn how to use the Go language to automate servers, the cloud, Kubernetes, GitHub, Packer, and Terraform (2022) by John Doak (Author), David Justice
  • CLI
    • Powerful Command-Line Applications in Go: Build Fast and Maintainable Tools (2021) by Ricardo Gerardi
    • Building Modern CLI Applications in Go: Develop next-level CLIs to improve user experience, increase platform usage, and maximize production (2023) by Marian Montagnino
  • Concurrency
    • Concurrency in Go: Tools and Techniques for Developers (2017) by Katherine Cox-Buddy
    • Learn Concurrent Programming with Go (2024) by James Cutajar
  • Efficient
    • Efficient Go: Data-Driven Performance Optimization by Bartlomiej Plotka
    • 100 Go Mistakes and How to Avoid Them (2022) by Teiva Harsanyi

Application Development

关于 Go Web 框架 - Click to expand! 不建议用 Go 写 Web ,可以用来完成一些基础设施类工作。Go 这边的 Web 框架,比如 gin 那种,其实都是非常轻量级的,属于 http 增强库,和 spring 全家桶不是一回事。Go 这边我觉得可以认为不具有诞生 springboot 类的土壤。

Go 的 Web 框架基本都是标准库套壳。也可以看看 fiber 这种用 fasthttp 的。

Go 是用来写底层服务的,不适合写应用层面的东西。

gin,其他想要什么组件可以自己加上去。

可以自己试着用用,组合出一套顺手的技术栈。

  • Cloud Native Go: Building Reliable Services in Unreliable Environments (2021) by Matthew Titmus
  • Go Web Programming (2016) by Chang Sau Sheong
  • Modern Web Development with Go: Build real-world, fast, efficient and scalable web server apps using Go programming language (2023) by Dušan Stojanović

Code Practice

Resources

Projects

Web Frameworks

Tools

  • IDE: GoLand, Visual Studio Code
  • Package Management: Go Modules

Application & Productivity

Java

Reference Java Resources

Kotlin 📈

C#

Primary

  • Documentation
  • Online Tutorials
  • Head First C# (4th, 2021) by Andrew Stellman
  • Learn C# in One Day and Learn It Well: C# for Beginners with Hands-on Project by Jamie Chan
  • The C# Player's Guide (5th, 2022) by RB Whitaker
  • C# 10 Pocket Reference: Instant Help for C# 10 Programmers (2022) by Joseph Albahari, Ben Albahari
  • C# 12 Pocket Reference: Instant Help for C# 12 Programmers (2023) by Joseph Albahari and Ben Albahari
  • Pro C# 10 with .NET 6: Foundational Principles and Practices in Programming (11th, 2022) by Andrew Troelsen, Phil Japikse
  • Professional C# and .NET (2021) by Christian Nagel

Style Guide

Project Structure

Advanced

  • Dive into
    • C# in Depth (4th, 2019) by Jon Skeet. (C# 6 and 7)
    • C# 10 in a Nutshell: The Definitive Reference (2022) by Joseph Albahari, Ben Albahari
    • C# 12 in a Nutshell: The Definitive Reference (2023) by Joseph Albahari
    • CLR VIA C# (4th, 2012) by Jeffrey Richter. (C# 9 and .NET 5)
  • Concurrency
    • Concurrency in C# Cookbook: Asynchronous, Parallel, and Multithreaded Programming (2nd, 2019) by Stephen Cleary
    • Concurrency in .NET: Modern patterns of concurrent and parallel programming by Riccardo Terrell
  • Effective
    • Effective C#: 50 Specific Ways to Improve Your C# (3rd, 2016) by Bill Wagner. (C# 6)
    • More Effective C#: 50 Specific Ways to Improve Your C# (2nd, 2017) by Bill Wagner (C# 7)

Applications Development

  • Programming C# 10: Build Cloud, Web, and Desktop Applications by Ian Griffiths
  • C# 10 and .NET 6 – Modern Cross-Platform Development by Mark J. Price

Web Frameworks

Tools

  • IDE: Rider, Visual Studio Code
  • Package Management: NuGet

Python 📈

Life is short (You need Python) - Bruce Eckel

Prime

  • Documentation
  • Online Tutorial
  • Learning Python (5th, 2013) by David Ascher and MARK LUTZ
  • Learn Python 3 the Hard Way: A Very Simple Introduction to the Terrifyingly Beautiful World of Computers and Code by Zed Shaw
  • A Byte of Python by Swaroop C.H. LINK
  • Automate the Boring Stuff with Python: Practical Programming for Total Beginners (3rd, 2024) by Al Sweigart
  • Python Crash Course: A Hands-On, Project-Based Introduction to Programming (3rd, 2023) by Eric Matthes
  • Python Pocket Reference: Python In Your Pocket (5th, 2014) by Mark Lutz
  • Think Python (2nd, 2016) by Allen B. Downey
  • Dive into Python 3 (2009) by Mark Pilgrim
  • The Hitchhiker's Guide to Python: Best Practices for Development by Kenneth Reitz, Tanya Schlusser. HTML
  • Python Essential Reference by David M. Beazley
  • Introducing Python: Modern Computing in Simple Packages (2nd, 2019) by Bill Lubanovic
  • Core Python Programming by Wesley J. Chun
  • Python Basics: A Practical Introduction to Python 3 (2021) by David Amos, Dan Bader
  • Python Tricks: A Buffet of Awesome Python Features (2017) by Dan Bader
  • The Quick Python Book (3rd, 2018) by Naomi Ceder

Style Guide

Project Structure

Advanced

  • Dive into
    • Python Cookbook: Recipes for Mastering Python 3 by Brian K. Jones and David M. Beazley
    • Fluent Python (2nd, 2022) by Luciano Ramalho
    • The Hacker's Guide to Python by Julien Danjou
    • CPython Internals: Your Guide to the Python 3 Interpreter by Anthony Shaw
    • Cython: A Guide for Python Programmers (2015) by Kurt W Smith
    • Classic Computer Science Problems in Python (2019) by David Kopec
    • Pro Python by Marty Alchin
    • Expert Python Programming by Tarek Ziadé
  • Effective
    • Effective Python: 59 Specific Ways to Write Better Python by Brett Slatkin
    • High Performance Python: Practical Performant Programming for Humans by Ian Ozsvald and Micha Gorelick
  • Object-Oriented
    • Programming Python: Powerful Object-Oriented Programming (4th. 2011) by Mark Lutz

New Books

  • Python Workout: 50 ten-minute exercises (2020) by Reuven M. Lerner
  • Tiny Python Projects: 21 small fun projects for Python beginners designed to build programming skill, teach new algorithms and techniques, and introduce software testing (2020) by Ken Youens-Clark
  • Classic Computer Science Problems in Python (2019) by David Kopec
  • Beyond the Basic Stuff with Python: Best Practices for Writing Clean Code (2020) by Al Sweigart
  • Python for Excel: A Modern Environment for Automation and Data Analysis (2021) by Felix Zumstein
  • Architecture Patterns with Python: Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices (2020) by Harry Percival, Bob Gregory
  • Python for DevOps: Learn Ruthlessly Effective Automation (2020) by Noah Gift, Kennedy Behrman, Alfredo Deza, Grig Gheorghiu
  • Using Asyncio in Python: Understanding Python's Asynchronous Programming Features (2020) by Caleb Hattingh
  • Mastering Large Datasets with Python: Parallelize and Distribute Your Python Code (2020) by John T. Wolohan
  • Practices of the Python Pro (2020) by Dane Hillard
  • Real-World Python: A Hacker's Guide to Solving Problems with Code (2020) by Lee Vaughan
  • Python One-Liners: Write Concise, Eloquent Python Like a Professional (2020) by Christian Mayer
  • Cracking Codes with Python: An Introduction to Building and Breaking Ciphers (2018) by Al Sweigart
  • Impractical Python Projects: Playful Programming Activities to Make You Smarter (2018) by Lee Vaughan
  • Serious Python: Black-Belt Advice on Deployment, Scalability, Testing, and More (2018) by Julien Danjou

Directions

  • Crawler
  • Data Science / Data Engineering
    • Python for Data Analysis by Wes McKinney
    • Intro to Python for Computer Science and Data Science by Paul Deitel, Harvey Deitel
  • AI
    • Machine Learning (TensorFlow)
      • Introduction to Machine Learning with Python: A Guide for Data Scientists by Andreas C. Müller and Sarah Guido
      • Machine Learning Pocket Reference: Working with Structured Data in Python (2019) by Matt Harrison
      • Hands-On Machine Learning with Scikit-Learn, Keras, and Tensorflow: Concepts, Tools, and Techniques to Build Intelligent Systems by Aurélien Géron
      • TensorFlow 2 Pocket Reference: Building and Deploying Machine Learning Models by KC Tung
    • Deep Learning (PyTorch)
      • Deep Learning with Python by François Chollet
      • Deep Learning with PyTorch: Build, train, and tune neural networks using Python tools by Eli Stevens, Luca Antiga, Thomas Viehmann
      • Deep Learning for Coders with Fastai and PyTorch: AI Applications Without a PhD by Jeremy Howard, Sylvain Gugger
      • PyTorch Pocket Reference: Building and Deploying Deep Learning Models by Joe Papa
    • NLP (Transformers)
      • Natural Language Processing in Action: Understanding, analyzing, and generating text with Python (2019) by Hobson Lane, Hannes Hapke, Cole Howard
      • Natural Language Processing with Transformers by Lewis Tunstall, Leandro von Werra, Thomas Wolf

Resources

Libraries

Web Frameworks

Tools

  • IDE: PyCharm, Visual Studio Code
  • Package Management: pip

Framework / Library Projects

Application Projects

  • feapder 一款上手简单,功能强大的Python爬虫框架。

Ruby 📉

  • Documentation
  • Online Tutorials
  • The Well-Grounded Rubyist by David A. Black
  • Programming Ruby: The Pragmatic Programmers' Guide by Dave Thomas, Chad Fowler, and Andy Hunt
  • Eloquent Ruby by Russ Olsen
  • Why's (Poignant) Guide to Ruby by Why The Lucky Stiff
  • The Ruby Programming Language by David Flanagan, Yukihiro Matsumoto, Why The Lucky Stiff
  • The Rails Way by Obie Fernandez
  • Agile Web Development with Rails: A Pragmatic Guide by Dave Thomas
  • Practical Object Oriented Design in Ruby by Sandi Metz

Style Guide

Project Structure

Web Frameworks

Tools

  • IDE: RubyMine, Visual Studio Code
  • Package Management: RubyGems

PHP 📉

Primary

Some more

  • Head First PHP and MySQL by Lynn Beighley and Michael Morrison
  • PHP for the Web: Visual QuickStart Guide by Larry Ullman
  • PHP 6 and MySQL 5 for Dynamic Web Sites: Visual Quickpro Guide by Larry Ullman

Style Guide

Project Structure

Modern PHP

  • Modern PHP: New Features and Good Practices (2015) by Josh Lockhart

Advanced

  • PHP 8 Objects, Patterns, and Practice: Mastering OO Enhancements, Design Patterns, and Essential Development Tools (6th, 2021) by Matt Zandstra
  • PHP Cookbook: Modern Code Solutions for Professional Developers (2023) by Adam Trachtenberg and David Sklar
  • Best Practices
    • Clean Code in PHP: Expert tips and best practices to write beautiful, human-friendly, and maintainable PHP (2022) by Carsten Windler, Alexandre Daubois
    • PHP 8 Programming Tips, Tricks and Best Practices: A practical guide to PHP 8 features, usage changes, and advanced programming techniques (2021) by Doug Bierer
  • Laravel
    • Laravel: Up & Running: A Framework for Building Modern PHP Apps (3rd, 2023) by Matt Stauffer

Web Frameworks

Tools

  • IDE: PhpStorm, Visual Studio Code
  • Package Management: Composer

Framework / Library Projects

Application Projects

  • Faker Faker is a PHP library that generates fake data for you
  • monica Personal CRM. Remember everything about your friends, family and business relationships
  • koel A personal music streaming server that works.
  • flarum Simple forum software for building great communities.
  • firefly-iii Firefly III: a personal finances manager
  • grav Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony
  • BookStack A platform to create documentation/wiki content built with PHP & Laravel
  • bagisto Free and open source laravel eCommerce platform
  • voyager Voyager - The Missing Laravel Admin
  • laravel-admin Build a full-featured administrative interface in ten minutes
  • typecho A PHP Blogging Platform. Simple and Powerful.
  • october Self-hosted CMS platform based on the Laravel PHP Framework.
  • wallabag wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely.
  • woocommerce A customizable, open-source ecommerce platform built on WordPress. Build any commerce solution you can imagine.
  • FreshRSS A free, self-hostable news aggregator
  • CRMEB CRMEB开源商城免费开源多语言商城系统,Tp6框架商城
  • ThinkAdmin 基于 ThinkPHP6 的极简后台管理系统

Node.js (JavaScript)

Reference Web Frontend Resources - Node.js

Client Application

JavaScript 📈

Reference Web Frontend Resources - JavaScript

Android

  • Android Documentation - doc
  • Android Programming: The Big Nerd Ranch Guide by Brian Hardy, Bill Phillips
  • Head First Android Development: A Brain-Friendly Guide by DAVID GRIFFITHS and Dawn Griffiths
  • The Busy Coder's Guide to Advanced Android Development by Mark Murphy
  • Android Programming: Pushing the Limits by Erik Hellman
  • Professional Android 4 Application Development by Reto Meier
  • Learning Android by Marko Gargenta
  • Programming Android: Java Programming for the New Generation of Mobile Devices by Zigurd Mednieks, Laird Dornin, G. Blake Meike, Masumi Nakamura

Android in Kotlin

Android Studio

Objective-C

Courses

Swift

  • Documentation
  • Online Tutorials
  • Swift in Depth by Tjeerd in 't Veen
  • IOS 12 Programming for Beginners: An Introductory Guide to IOS App Development with Swift 4.2 and Xcode 10 (3rd, 2018) by Craig Clayton
  • IOS 10 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics by Matt Neuburg
  • Swift 5 for Absolute Beginners: Learn to Develop Apps for iOS by Stefan Kaczmarek, Brad Lees, Gary Bennett

Windows Desktop Applications

  • C# + Windows Forms or WPF
  • C++ + Win32 API、MFC or Qt
  • Visual Basic .NET

Linux Desktop Applications

  • C/C++
    • GTK+
    • Qt
  • Python
    • GTK+
    • PyQt/PySide
    • Tkinter

Cross-Platform Applications

One codebase for all platforms (web, mobile, desktop)

  • JavaScript/TypeScript
    • React Native
    • Ionic
    • Progressive Web Apps (PWA)
    • Apache Cordova / PhoneGap
  • Dart
    • Flutter
  • C#
    • Xamarin
    • Unity
    • .NET MAUI
  • Java
    • JavaFX
  • Kotlin
    • Kotlin Multiplatform
  • C++
    • Qt
  • Python
    • Qt

Mobile cross-platform (Android, iOS)

  • Ruby
    • RubyMotion

Desktop cross-platform (Windows, macOS, and Linux)

Glue & Convenience

Python, JavaScript, Ruby, Perl, Bash, Groovy, PHP, Lua, F# and Clojure.

Perl

  • Perl 5.30.0 documentation
  • Perl Docs
  • Learning Perl by Randal L. Schwartz
  • Beginning Perl by Curtis 'Ovid' Poe
  • Programming Perl by Tom Christiansen
  • Perl Cookbook by Tom Christiansen, Nathan Torkington
  • Modern Perl by chromatic
  • Intermediate Perl by Randal L. Schwartz, Brian D. Foy, Tom Phoenix
  • Perl Best Practices: Standards and Styles for Developing Maintainable Code by Damian Conway
  • Mastering Perl by Brian D. Foy
  • Higher-Order Perl: Transforming Programs with Programs by Mark Jason Dominus
  • Object Oriented Perl: A Comprehensive Guide to Concepts and Programming Techniques by Damian Conway, Randal L. Schwartz

Groovy

Lua

  • Documentation
  • Online Tutorials
  • Programming in Lua by Roberto Ierusalimschy
  • Lua Programming Gems by Luiz Henrique de Figueiredo, Waldemar Celes, Roberto Ierusalimschy
  • Beginning Lua programming by Kurt Jung
  • Lua Quick Start Guide: The Easiest Way to Learn Lua Programming by Gabor Szauer
  • Lua 5.2 Reference Manual by Luiz Henrique de Figueiredo, Roberto Ierusalimschy, and Waldemar Celes

Minority programming languages

Clojure

  • Clojure Documentation
  • Clojure for the Brave and True: Learn the Ultimate Language and Become a Better Programmer (2015) by Daniel Higginbotham
  • Programming Clojure (3rd, 2018) by Alex Miller, Stuart Halloway, Aaron Bedra
  • Getting Clojure: Build Your Functional Skills One Idea at a Time (2018) by Russ Olsen
  • The Joy of Clojure (2nd, 2014) by Michael Fogus, Chris Houser
  • Living Clojure: An Introduction and Training Plan for Developers (2015) by Carin Meier
  • Elements of Clojure (2019) by Zachary Tellman
  • Clojure Programming: Practical Lisp for the Java World (2012) by Chas Emerick, Christophe Grand, Brian Carper
  • Clojure Applied: From Practice to Practitioner (2015) by Ben Vandgrift, Alex Miller
  • Mastering Clojure Macros: Write Cleaner, Faster, Smarter Code (2014) by Colin Jones
  • Clojure in Action (2nd, 2016) by Amit Rathore, Francis Avila

Web Development

  • Web Development with Clojure (3rd, 2021) by Dmitri Sotnikov and Scot Brown
  • Clojure Web Development Essentials (2015) by Ryan Baldwin

Web Frameworks

The majority of web development in Clojure is done with a collection of libraries chosen by the development team, depending on their preferences and their needs, rather than frameworks.

  • Luminus - micro-framework
  • Coast
  • Biff

Dependency Management

F#

  • F# documentation
  • F# in Action (2024) by Isaac Abraham
  • Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# (2018) by Scott Wlaschin
  • Stylish F# 6: Crafting Elegant Functional Code for .NET 6 (2nd, 2021) by Kit Eason
  • Get Programming with F#: A guide for .NET developers (2018) by Isaac Abraham
  • Real-World Functional Programming: With Examples in F# and C# (2010) by Tomas Petricek, Jon Skeet
  • The Book of F#: Breaking Free With Managed Functional Programming (2014) by Dave Fancher

Big Data Field

Scala

  • Documentation
  • Online Tutorials
  • Programming in Scala by Bill Venners and Martin Odersky
  • Functional Programming in Scala by Paul Chiusano and Rúnar Bjarnason
  • Scala for the Impatient by Cay S. Horstmann
  • Scala in Depth by Joshua D. Suereth
  • Scala Cookbook: Recipes for Object-Oriented and Functional Programming by Alvin Alexander
  • Programming Scala: Scalability = Functional Programming + Objects by Alex Payne and Dean Wampler
  • Scala in Action by Nilanjan Raychaudhuri
  • Functional Programming, Simplified: (Scala Edition) by Alvin Alexander
  • Learning Scala: Practical Functional Programming for the JVM by Jason Swartz
  • Scala Puzzlers by Andrew Phillips and Nermin Serifovic

Real-time systems

Erlang

Statistical analysis

R

Industrial field

Visual Basic

Academic research and education

Lisp

屠龙之技厉害,奈何龙少。

  • Documentation
  • Practical Common Lisp by Peter Seibel
  • Paradigms of AI Programming: Case Studies in Common Lisp by Peter Norvig
  • Common LISP: A Gentle Introduction to Symbolic Computation by David S. Touretzky
  • Structure and Interpretation of Computer Programs by Gerald Jay Sussman and Hal Abelson
  • On Lisp by Paul Graham
  • Land of Lisp: Learn to Program in Lisp, One Game at a Time! by Conrad Barski
  • Common Lisp the Language by Guy L. Steele Jr.
  • ANSI Common Lisp by Paul Graham
  • The Little Schemer by Daniel P. Friedman and Matthias Felleisen

Haskell

  • Haskell Documentation - doc
  • Learn You a Haskell for Great Good!: A Beginner's Guide by Miran Lipovača HTML
  • Real World Haskell: Code You Can Believe In by Bryan O'Sullivan HTML
  • Learn Haskell by building a blog generator by Gil Mizrahi HTML
  • Programming in Haskell by Graham Hutton
  • Haskell Programming From First Principles by Christopher Allen, Julie Moronuki
  • Get Programming with Haskell by Will Kurt
  • Thinking Functionally with Haskell by Richard S. Bird
  • Haskell: The Craft of Functional Programming by Simon Thompson

Intermediate

  • Developing Web Apps with Haskell and Yesod: Safety-Driven Web Development (2nd, 2015) by Michael Snoyman HTML
  • Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming by Simon Marlow
  • Functional Design and Architecture: Examples in Haskell (2024) by Alexander Granin
  • Haskell in Depth (2021) by Vitaly Bragilevsky
  • Practical Haskell: A Real-World Guide to Functional Programming (2022) by Alejandro Serrano Mena
  • Production Haskell: Succeeding in Industry with Haskell (2023) by Matt Parsons

Web Frameworks

Others

Julia

D

  • D is a general-purpose programming language with static typing, systems-level access, and C-like syntax. With the D Programming Language, write fast, read fast, and run fast.
  • The D Programming Language by Andrei Alexandrescu

Ranking

Programming Languages Ranking

Project Ranking



SQL

Reference CS Advanced Domains Resources - Database Systems

Regular Expression

  • Mastering Regular Expressions by Jeffrey Friedl
  • Regular Expressions Cookbook by Jan Goyvaerts and Steven Levithan
  • Regular Expression Pocket Reference: Regular Expressions for Perl, Ruby, PHP, Python, C, Java and .NET Book by Tony Stubblebine

Regex Examples

Regex Tools

XML

HTML & CSS

Reference Web Frontend Resources - HTML & CSS

JSON

YAML


Markup Languages


Prime

  • Markdown

Some More

  • LaTex
  • Asciidoc
  • KaTeX
  • reStructuredText (rst, reST)
  • Wikipedia Wikitext / Wikicode
  • Creole
  • Textile
  • BBCode
  • Pendown


General

  • Metaprogramming Ruby by Paolo Perrotta
  • Concepts of Programming Languages by Robert W. Sebesta
  • Seven More Languages in Seven Weeks by Bruce A. Tate, Ian Dees, Frederic Daoud
  • 代码的未来 by [日] 松本行弘
  • 松本行弘的程序世界 by [日] 松本行弘
  • 冒号课堂:编程范式与OOP思想 by 郑晖
  • 代码之髓 by [日] 西尾泰和

Imperative programming / Procedural programming

C (1972), Pascal (1970), Fortran (1957), BASIC (1964), Ada (1980), COBOL (1959)

Object-Oriented Programming (OOP)

C++ (1985), C# (2000), Java (1995)

Object-Oriented Programming (OOP) emerged as a response to the limitations of procedural programming and to address the growing complexity of software systems.

OOP has become a dominant programming paradigm in software development because it helps to manage complexity, encourages good design practices, and facilitates collaboration among developers. As systems grew larger and more complex, the need for these benefits became more apparent, driving the adoption of OOP in both academic and commercial software development.

  • Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Ralph Johnson, John Vlissides, Richard Helm
  • Object-Oriented Software Construction by Bertrand Meyer
  • The Object-Oriented Thought Process (5th, 2019) by Matt Weisfeld
  • Elegant Objects by Yegor Bugayenko
  • Head First Object-Oriented Analysis and Design: A Brain Friendly Guide to OOA&D (2006) by Brett McLaughlin, Gary Pollice, David West
  • Object-Oriented Analysis and Design with Applications by Grady Booch
  • Object Design Style Guide: Powerful techniques for creating flexible, readable, and maintainable object-oriented code in any OO language, from Python to PHP (2020) by Matthias Noback
  • OOP Concepts Booster : Take Your Coding Skills to the Next Level by Rakesh Singh
  • 面向对象是怎样工作的 by [日]平泽章

Functional Programming (FP)

Haskell (2010), Scala (2004), Clojure (2007), F# (2005)

While functional programming isn't universally applicable to all problems or scenarios, it provides powerful abstractions, promotes clarity of thought, and addresses many challenges faced by developers in the modern software landscape. As a result, many languages, such as JavaScript, Python, and even Java, have incorporated functional programming concepts alongside traditional paradigms.

  • The Art of Functional Programming (2022) by Minh Quang Tran
  • An Introduction to Functional Programming Through Lambda Calculus (2011) by Greg Michaelson
  • Functional Design and Architecture: Examples in Haskell (2024) by Alexander Granin
  • Functional Design: Principles, Patterns, and Practices (2023) by Robert Martin
  • Grokking Simplicity: Taming complex software with functional thinking (2021) by Eric Normand
  • Grokking Functional Programming (2022) by Michal Plachta
  • Introduction to Functional Programming by Richard S. Bird, Philip Wadler
  • Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen
  • Thinking Functionally with Haskell by Richard S. Bird
  • Programming in Haskell by Graham Hutton
  • Functional Programming in Scala by Paul Chiusano and Rúnar Bjarnason
  • Functional Programming, Simplified (Scala Edition) by Alvin Alexander
  • Programming Clojure by Stuart Halloway, Susannah Davidson Pfalzer
  • Functional Programming In Java: How Functional Techniques Improve Your Java Programs by Pierre-Yves Saumont
  • Real-world Functional Programming: With Examples in F# and C# by Jon Skeet and Tomas Petricek
  • Functional Programming in JavaScript by Luis Atencio

Parallel Programming

Clojure (2007), Go (2012)

Reference CS Fundamentals Resources - Parallel

Garbage Collection

Java (1995), C# (2000)

  • The Garbage Collection Handbook: The Art of Automatic Memory Management by Antony Hosking, Eliot Moss, and Richard Jones
  • Garbage collection by Richard Jones
  • Java Performance Companion by Charlie Hunt, Poonam Bajaj, Bengt Rutisson, Monica Beckwith, John Cuthbertson
  • Java Performance Tuning by Jack Shirazi
  • 垃圾回收的算法与实现 by 中村成洋, 相川光

Virtual Machine

Lisp (1960), Smalltalk (1980), Pascal (1970), Java (1995)

Distributed computing

Erlang (1998)



Metaphor 1

Six months ago I'd never written a single line of code in my life. I applied to the Coding House dev bootcamp, got accepted and will be graduating next month. I feel super confident about my programming skills now and pumped to put them to work.

Learning to code is like learning a foreign language. You start out with a few basic words and phrases. Then you learn some grammar. Then you learn more words and phrases. Then you learn some more grammar. Then you learn some colloquialisms and slang. Then you learn some more words and phrases. Then you learn some more grammar. Rinse and repeat forever (because "fluency" is a nebulous concept).

When you learn to code, it's the exact same thing. You're learning the language to communicate with technology. Unfortunately, your computer is generally less forgiving than the locals. When you don't know how to ask for another drink at the bar, you can usually get by with "biru" in your funny foreigner accent and one finger held up in the air. When you throw some imperfect code at your machine, though, it'll throw an error in your face at best, or just stare condescendingly at you until you find your mistake (an hour later) and fix it.

When you learn to code, like when you learn a foreign language, you have to adapt your way of thinking to this new environment of communication. In Japanese, the verb comes last, so you start to put more thought into receiver of the action in your communication. In Javascript, the code executes logically, in order, line by line from the top, so you also have to think logically, in order, step by step through your code. And of course, there are always exceptions to the rules (async operations woo!).

Probably the most important parallel, though, is the persistence required to get good at a foreign language, or at coding. You're going to fail. A lot. Then you're going to get a little better. Then you're going to fail even more. You have to accept this constant state of not knowing and the possibility of failure if you want to improve. Eventually you'll look back and realize that you're having a conversation with that bartender now and getting her number. Eventually you'll realize you can spin up a server, design a website or make an app, despite how much you thought you sucked at all this and probably should've just given up a long time ago.

So dive in and get your hands dirty! Break your machine, then learn how to put it all back together again. The journey of a thousand miles and all that jazz.

by Patrick Shaughnessy

2. How to explain coding concepts like streams, promises, linting, and declarative programming to a 5-year-old

I love thinking about coding concepts by comparing them to familiar things we know in life. There are so many analogies out there about coding concepts. Some of them are good while others are confusing, mainly because they focus on partial aspects of a concept while ignoring many others. This article will summarize some of the analogies that I think best fit a few coding concepts in complete ways.

I will start with simple concepts and move on to harder ones. Let’s start with coding itself. Coding can be compared to writing cooking recipes. A recipe in this analogy is the program and the cook is the computer. A recipe is a list of instructions for a cook to follow and a program is a list of instructions for a computer to execute.

This is a very simple analogy given that a recipe is written in a human language and a program is written in a computer language and those are very different languages (unless your recipes have closures and promises!). There are also not a lot of unexpected things to plan for in a recipe while a computer program will have many. Regardless of its simplicity, it is a good way to show how a computer carries out a list of instructions sequentially. It also shows where one instruction line can use any result from executing prior instruction lines.

Some recipes will even have if-statements: if cooking for 2, 4 or 8! Some recipes will have loops: keep beating that mix until…

I also like this analogy because of all the ready items and tools that you can use in your recipes — like the cake mix that you can use to make cupcakes and that specially-shaped pan that makes it so much easier to create cupcakes.

The use of ready items and tools is like including and using a package of code written by others in your own code.

// The making of a cupcake// First steps:
$ npm install cake-mix $ npm install cupcake-pan

NPM is the package manager for Node.js, which a very popular framework for writing JavaScript applications. In this analogy, Node.js is like the kitchen itself. It allows you to execute lines in your recipes by using built-in modules like your oven and sink.

Speaking of unhealthy food, this next analogy is for learning how to code and is compared to eating habits. I particularly LOVE this analogy and what it conveys because it helps me to stay on track in my code learning journey. For me, this began in high school and will continue until my brain reaches its last instruction: die();

by Samer Buna



1. Think of Programming Languages as Workshops

Python, all the latest power tools, including a few that might not work perfectly, but they're new and nothing is going to cut your hand off or give you tetanus.

C/C++, this is grandpa's barn. All the tools are there, somewhere, but watch out for the black widows and rusted nails sticking up. Oh yeah, everything is hand powered, even the drill and metal lathe.

Rust, the above minus all the old, broken and dirty cruft. Very useful when the power goes out.

FORTRAN, the ultimate high power assembly line. Great for crunching numbers. Heaven help you if you want to do anything else.

Haskell, every CNC machine ever made, clean, works great, totally dust, dirt and grime free. No manuals or displays, however. Those would create side effects.

Erlang, all kinds of little workers in cubicles only able to do one job each. Lots of fun watching stuff being shuttled through old style vacuum transportation tubes.

LISP, a furnace, anvil, crucible, ingot mold, hammer, tongs, pile of coal and pile of scrap metal. Make your own bleeding tools!

Assembly, a hole in the ground containing ore. Get digging, after you make a shovel, of course.

This is actually a lot of fun to do and really points out weaknesses and strengths of different languages.

by Andrew Olson

References

[1] The Definitive C++ Book Guide and List