Computer science, the study of computers and computing, including their theoretical and algorithmic foundations, hardware and software, and their uses for processing information. The discipline of computer science includes the study of algorithms and data structures, computer and network design, modeling data and information processes, and artificial intelligence. Computer science draws some of its foundations from mathematics and engineering and therefore incorporates techniques from areas such as queueing theory, probability and statistics, and electronic circuit design. Computer science also makes heavy use of hypothesis testing and experimentation during the conceptualization, design, measurement, and refinement of new algorithms, information structures, and computer architectures.1
- Computational Thinking : Computational Thinking is the thought processes involved in formulating a problem and expressing its solution(s) in such a way that a computer-human or machine—can effectively carry out.
- Design Patterns : a design pattern is a general repeatable solution to a commonly occurring problem in software design
- AntiPattern : An AntiPattern is a literary form that describes a commonly occurring solution to a problem that generates decidedly negative consequences.
- Informal History Of Programming Ideas
- Obtaining a Thorough CS Background Online - I’d like to show you a way to obtain a computer science background that doesn’t involve enrolling in a university program. Maybe you’ve completed an introductory Java course, and now you’d like to pursue a software development position. Or maybe you already have some formal CS training, and you’d like to fill in a couple of knowledge gaps. By utilizing online learning resources, you can obtain that background without incurring the costs of the traditional university approach.
The Art of Computer Programming, Volumes 1-4a Boxed Set
These four books comprise what easily could be the most important set of information on any serious programmer's bookshelf.
Introduction to Computation and Programming Using Python
This book introduces students with little or no prior programming experience to the art of computational problem solving using Python and various Python libraries, including PyLab. It provides students with skills that will enable them to make productive use of computational techniques, including some of the tools and techniques of data science for using computation to model and interpret data.
"Uncle" Bob Martin - "The Future of Programming"
Bret Victor The Future of Programming
ITT 2016 - Kevlin Henney - Seven Ineffective Coding Habits of Many Programmers
Tips For Reading Code - One way to improve programming skills is to ReadGreatPrograms. Techniques such as SelfDocumentingCode and LiterateProgramming have been developed toward the goal of writing programs that can be easily read. However, most of us have to read lots of code that does not meet the above standards. What are the best ways to make sense out of those huge, unstructured, maintained-by-dozens-of-people, internally-inconsistent, undocumented code bases that we must understand and absorb?
One secret to becoming a great software engineer: read code - Become a better programmer by building a routine and habit for reading code
In software engineering, don't repeat yourself (or do not repeat yourself; aka DRY) is a principle of software development aimed at reducing repetition of software patterns, replacing it with abstractions or using data normalization to avoid redundancy.2
The Twelve Factor App In the modern era, software is commonly delivered as a service: called web apps, or software-as-a-service. The twelve-factor app is a methodology for building software-as-a-service apps such that:
- Use declarative formats for setup automation, to minimize time and cost for new developers joining the project;
- Have a clean contract with the underlying operating system, offering maximum portability between execution environments;
- Are suitable for deployment on modern cloud platforms, obviating the need for servers and systems administration;
- Minimize divergence between development and production, enabling continuous deployment for maximum agility;
- And can scale up without significant changes to tooling, architecture, or development practices.
The twelve-factor methodology can be applied to apps written in any programming language, and which use any combination of backing services (database, queue, memory cache, etc).