# Programming > [!summary]+ > wikipedia:: [Software development - Wikipedia](https://en.wikipedia.org/wiki/Software_development) > - [Software engineering - Wikipedia](https://en.wikipedia.org/wiki/Software_engineering) > - [Computer programming - Wikipedia](https://en.wikipedia.org/wiki/Computer_programming) > - [Outline of software development - Wikipedia](https://en.wikipedia.org/wiki/Outline_of_software_development) > - [Outline of software engineering - Wikipedia](https://en.wikipedia.org/wiki/Outline_of_software_engineering) ## Meta Programming ### Project Setup - [[New Project Setup]] - [[My Project Setup Strategy]] ### Design Patterns & Conventions - [[Programming patterns, design patterns, principles, best practices, & code quality]] - [[Code Linting, Formatting, Conventions, & Style]] ### Technical Documentation & Comments - [[Technical Documentation & Comments]] ### Practical - [[Debugging & Troubleshooting]] - [[Refactoring]] - [[Live Coding]] ### Testing & QA - [[Testing & QA]] ### [[Licensing, IP & Open Source]] ## Language - [[Programming Language]] ## Fundamentals - [[Programming Elements]] ## Programming Concepts ### Pattern Generalization #### Creating models, rules, principles, and theories for observed patterns - e.g. creating a weather model ### [[Floating Point Precision]] ### Binary search tree ### Sparse matrices (sparse array) ### [[State]] ### Composition #### Building functions by using other functions ### Open upper bound and open lower bound means the upper and lower bound is excluded? ### Lazy Evaluation & Eager Evaluation #### Lazy Evaluation - expression doesn't evaluate until it is needed - aka 'call-by-need' #### Eager Evaluation - aka 'greedy' or 'strict' - evaluated as soon as bound to a variable ### Concurrent Programming #### Atomiticity ### Developer Roadmaps #### https://github.com/kamranahmedse/developer-roadmap ### Generics #### https://en.wikipedia.org/wiki/Generic_programming #### ### Type Inference #### https://en.wikipedia.org/wiki/Type_inference ### Syntactic Sugar #### https://en.wikipedia.org/wiki/Syntactic_sugar ### List Comprehension #### https://en.wikipedia.org/wiki/List_comprehension ### Closure #### https://en.wikipedia.org/wiki/Closure_(computer_programming) #### Similar to a function, but anonymous. Though you would normally assign the closure to a variable and reference it that way. Technically - a record storing a function together with an environment. There are various benefits - unlike a plain function, a closure allows the function to access those captured variables through the closure's copies of their values or references even when the function is invoked outside their scope. So you can't do that with a regular function because you are limited to local and externally scoped vars but with a closure you can access the passed in vars as local - something like that? ### Reflection #### https://en.wikipedia.org/wiki/Reflection_(computer_programming) ### https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic ### https://www.toptal.com/developers/sorting-algorithms ### https://github.com/j5awry/breakingin/blob/master/advice/toolstipsandtricks.md ### MapReduce #### https://en.wikipedia.org/wiki/MapReduce #### A programming model and an associated implementation for processing and generating big data sets with a parallel, distributed algorithm on a cluster. ## [[Software Architecture]] ## [[Computer science]] ## [[Software Development Process]] ## [[DevOps]] ## [[Project & Product Management, Ownership, Leadership, & Agile]] ## [[Data]] ## [[Text]] ## [[Web Development]] ## [[Mobile app development]] ## Tools ### [[IDEs & Text Editors]] ## Issues ## Sources ### Websites - [Exercism](https://exercism.org/) - [ProgramCreek.com](https://www.programcreek.com/) - Good site to search for actual examples from actual repos. ### The Complete Software Developer's Career Guide ### The Self-taught Programmer ### Clean Code #### Small things matter - details #### No Excuses - When hand-washing was originally recommended for doctors, it was dismissed due to the claim that doctors are too busy to do that. - not your managers' fault, your boss, your deadline. It's your fault for letting those expectations get set in the first place - If a patient requested his doctor not wash his hands before surgery, the doctor should refuse - and it should be illegal to comply. #### Crisp abstractions - The words should disappear into clear, decisive intent. #### Boy Scout Rule - Leave the campground cleaner than you found it. #### Can be read and enhanced by a developer other than its original author. #### Kind of a prequel to Uncle Bob's Agile Software Development: Principles, Patterns, and Practices (PPP) #### You read code more often than you write code - Factor of 10:1 - Even when writing new code - vast majority of time is reading the existing code. - So you should optimize for making code more readable. - There's no way to write new code without reading code, so making code easier to read makes it easier to write. #### Expressiveness - Reduces duplication - Creating abstractions early - E.g., recognizing you need to search a collection in multiple ways in your program so you write an abstract method and implement it when/how you need it #### Rather than wait for bugs, you should always be refactoring and improving your code #### Software as craftsmanship - knowledge plus work. - the principles get ground into your gut, fingers, and heart. #### Programmers know messes slow them down but still feel pressure to go fast and cut corners, thus slowing them down ad infinitum. Programmers don't take the time to go fast. #### Clean code is care - "Clean code always looks like it was written by someone who cares. There is nothing obvious that you can do to make it better. All of those things were thought about by the code's author, and if you try to imagine improvements, you're led back to where you are, sitting in appreciation of the code someone left for you - code left by someone who cares deeply about their craft." #### Obvious - Makes it look like the language was designed for just this problem - no matter the language. The onus for that is on the programmer, not the language. - what you expected, no surprises, effortless to read #### Smells and Heuristics - (Chapter 17) #### Clean code is the sum of little techniques applied through a painstakingly acquired sense of cleanliness. #### Most of programming is maintenance #### Making your code readable is as important as making it executable ### Code Complete ### Programming Pearls ### The Pragmatic Programmer ### [[The Mythical Man-Month]] ### Automate the Boring Stuff ### Curly Bracket ### Udacity Nanodegree #### https://www.udacity.com/course/software-debugging--cs259 #### https://www.udacity.com/course/programming-foundations-with-python--ud036 #### https://www.udacity.com/course/intro-to-algorithms--cs215 #### https://www.udacity.com/course/intro-to-programming-nanodegree--nd000 #### https://www.udacity.com/course/software-analysis-testing--ud333 #### https://www.udacity.com/course/intro-to-computer-science--cs101 #### https://www.udacity.com/course/intro-to-theoretical-computer-science--cs313 #### https://www.udacity.com/course/design-of-computer-programs--cs212 ### https://developers.google.com/ ### Teach Yourself Programming in 10 Years #### https://norvig.com/21-days.html - [JetBrains Academy — Learn programming by building your own apps](https://hyperskill.org/tracks) - [Math to Code](https://mathtocode.com/) - [You've only added two lines - why did that take two days! ](https://www.mrlacey.com/2020/07/youve-only-added-two-lines-why-did-that.html?m=1) - [JSONPlaceholder - Free Fake REST API](https://jsonplaceholder.typicode.com/) - [Principle of least privilege - Wikipedia](https://en.m.wikipedia.org/wiki/Principle_of_least_privilege) ### Bootcamps - [[-LaunchCode]] - [Coding Bootcamp - Learn Coding & Data Science | Coding Dojo](https://www.codingdojo.com/b) ## Inbox - [[Lindy Effect]] - [[Software Rot, Erosion, Decay, Entropy]] - [[There's More Than One Way To Do It]] - [[Convention Over Configuration]]