<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Computer-Engineering on maladroit.dev</title><link>https://maladroit-dev-398201.gitlab.io/tags/computer-engineering/</link><description>Recent content in Computer-Engineering on maladroit.dev</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://maladroit-dev-398201.gitlab.io/tags/computer-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>100 Go Mistakes</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/100-go-mistakes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/100-go-mistakes/</guid><description>&lt;h1 id="100-go-mistakes"&gt;100 Go Mistakes&lt;/h1&gt;
&lt;p&gt;Go is a programming language that is simple to learn but difficult to master.&lt;/p&gt;
&lt;h2 id="organization"&gt;Organization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/variable-shadowing"&gt;Variable shadowing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/unnecessary-nested-code"&gt;Unnecessary Nested Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/misusing-init-functions"&gt;Misusing init functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/overusing-getters-and-setters"&gt;Overusing getters and setters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/interface-pollution"&gt;Interface pollution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/interface-on-the-producer-side"&gt;Interface on the producer side&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/returning-interfaces"&gt;Returning interfaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/any-says-nothing"&gt;Any says nothing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/being-confused-about-when-to-use-generics"&gt;Being confused about when to use generics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-being-aware-of-the-problems-with-type-embedding"&gt;Not being aware of the possible problems with type embedding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-the-functional-options-pattern"&gt;Not using the functional options pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/project-disorganization"&gt;Project disorganization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/creating-utility-packages"&gt;Creating utility packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/ignoring-package-name-collisions"&gt;Ignoring package name collisions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/missing-code-documentation"&gt;Missing code documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-linters"&gt;Not using linters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="data-types"&gt;Data types&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/creating-confusion-with-octal-literals"&gt;Creating confusion with octal literals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/neglecting-integer-overflows"&gt;Neglecting integer overflows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-floating-points"&gt;Not understanding floating points&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-slice-length-and-capacity"&gt;Not understanding slice length and capacity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/inefficient-slice-initialization"&gt;Inefficient slice initialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/being-confused-about-nil-and-the-empty-slice"&gt;Being confused about nil and the empty slice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-properly-checking-if-a-slice-is-empty"&gt;Not properly checking if a slice is empty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-making-slice-copies-correctly"&gt;Not making slice copies correctly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/unexpected-side-effects-using-slice-append"&gt;Unexpected side effects of using slice append&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/slices-and-memory-leaks"&gt;Slices and memory leaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/inefficient-map-initialization"&gt;Inefficient map initialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/maps-and-memory-leaks"&gt;Maps and memory leaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/comparing-values-incorrectly"&gt;Comparing values incorrectly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="control-structures"&gt;Control structures&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/ignoring-the-fact-that-elements-are-copied-in-range-loops"&gt;Ignoring the fact that elements are copied in range loops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/ignoring-how-arguments-are-evaluated-in-range-loops"&gt;Ignoring how arguments are evaluated in range loops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/ignoring-the-impact-of-using-pointer-elements-in-range-loops"&gt;Ignoring the impact of using pointer elements in range loops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/making-wrong-assumptions-during-map-iterations"&gt;Making wrong assumptions during map iterations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/ignoring-how-the-break-statement-works"&gt;Ignoring how the break statement works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/using-a-defer-inside-a-loop"&gt;Using a defer inside a loop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="strings"&gt;Strings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-the-concept-of-a-rune"&gt;Not understanding the concept of a rune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/inaccurate-string-iteration"&gt;Inaccurate string iteration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/misusing-trim-functions"&gt;Misusing trim functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/under-optimized-string-concatenation"&gt;Under-optimized string concatenation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/useless-string-conversions"&gt;Useless string conversions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/substrings-and-memory-leaks"&gt;Substrings and memory leaks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="functions-and-methods"&gt;Functions and methods&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-knowing-which-type-of-receiver-to-use"&gt;Not knowing which type of receiver to use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/never-using-named-result-parameters"&gt;Never using named result parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/unintended-side-effects-with-named-result-parameters"&gt;Unintended side effects with named result parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/returning-a-nil-receiver"&gt;Returning a nil receiver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/using-a-filename-as-a-function-input"&gt;Using a filename as a function input&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/ignoring-how-defer-arguments-and-receivers-are-evaluated"&gt;Ignoring how defer arguments and receivers are evaluated&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="error-management"&gt;Error management&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/panicking"&gt;Panicking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/ignoring-when-to-wrap-an-error"&gt;Ignoring when to wrap an error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/checking-an-error-type-inaccurately"&gt;Checking an error type inaccurately&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/checking-an-error-value-inaccurately"&gt;Checking an error value inaccurately&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/handling-an-error-twice"&gt;Handling an error twice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-handling-an-error"&gt;Not handling an error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-handling-defer-errors"&gt;Not handling defer errors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="concurrency"&gt;Concurrency&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/mixing-up-concurrency-and-parallelism"&gt;Mixing up concurrency and parallelism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/thinking-concurrency-is-always-faster"&gt;Thinking concurrency is always faster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/being-puzzled-about-when-to-use-channels-or-mutexes"&gt;Being puzzled about when to use channels or mutexes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-race-problems"&gt;Not understanding race problems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-the-concurrency-impacts-of-a-workload-type"&gt;Not understanding the concurrency impacts of a workload type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/misunderstanding-go-contexts"&gt;Misunderstanding Go contexts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/propagating-an-inappropriate-context"&gt;Propagating an inappropriate context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/starting-a-goroutine-without-knowing-when-to-stop-it"&gt;Starting a goroutine without knowing when to stop it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-being-careful-with-goroutines-and-loop-variables"&gt;Not being careful with goroutines and loop variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/expecting-deterministic-behavior-using-select-and-channels"&gt;Expecting deterministic behavior using select and channels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-notification-channels"&gt;Not using notification channels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-nil-channels"&gt;Not using nil channels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/being-puzzled-about-channel-size"&gt;Being puzzled about channel size&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/forgetting-about-possible-side-effects-with-string-formatting"&gt;Forgetting about possible side effects with string formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/creating-data-races-with-append"&gt;Creating data races with append&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/using-mutexes-inaccurately-with-slice-and-maps"&gt;Using mutexes inaccurately with slices and maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/misusing-sync-waitgroup"&gt;Misusing sync.WaitGroup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/forgetting-about-sync-cond"&gt;Forgetting about sync.Cond&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-errgroup"&gt;Not using errgroup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/copying-a-sync-type"&gt;Copying a sync type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="standard-library"&gt;Standard library&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/providing-a-wrong-time-duration"&gt;Providing a wrong time duration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/time-after-and-memory-leaks"&gt;time.After and memory leaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/common-json-handling-mistakes"&gt;Common JSON handling mistakes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/common-sql-mistakes"&gt;Common SQL mistakes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-closing-transient-resources"&gt;Not closing transient resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/forgetting-the-return-after-replying-to-an-http-request"&gt;Forgetting the return after replying to an HTTP request&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/using-the-default-http-client-and-server"&gt;Using the default HTTP client and server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-categorizing-tests"&gt;Not categorizing tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-enabling-the-race-flag"&gt;Not enabling the -race flag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-test-execution-modes"&gt;Not using test execution modes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-table-driven-tests"&gt;Not using table driven tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/sleeping-in-unit-tests"&gt;Sleeping in unit tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-dealing-with-the-time-api-efficiently"&gt;Not dealing with the time API efficiently&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-testing-utility-packages"&gt;Not using testing utility packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/writing-inaccurate-benchmarks"&gt;Writing inaccurate benchmarks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-exploring-all-the-go-testing-features"&gt;Not exploring all the Go test features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="optimizations"&gt;Optimizations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-cpu-caches"&gt;Not understanding CPU caches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/writing-concurrent-code-that-leads-to-false-sharing"&gt;Writing concurrent code that leads to false sharing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-taking-into-account-instruction-level-parallelism"&gt;Not taking into account instruction-level parallelism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-being-aware-of-data-alignment"&gt;Not being aware of data alignment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-stack-vs-heap"&gt;Not understanding stack vs heap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-knowing-how-to-reduce-allocations"&gt;Not knowing how to reduce allocations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-relying-on-inlining"&gt;Not relying on inlining&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-using-go-diagnostic-tools"&gt;Not using Go diagnostic tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-how-the-gc-works"&gt;Not understanding how the GC works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/100-go-mistakes/not-understanding-the-impacts-of-running-go-in-docker-and-kubernetes"&gt;Not understanding the impacts of running Go in Docker and Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/100-go-mistakes-and-how-to-avoid-them"&gt;100 Go Mistakes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Algorithms</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/algorithms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/algorithms/</guid><description>&lt;h1 id="algorithms"&gt;Algorithms&lt;/h1&gt;
&lt;p&gt;Algorithms are step by step procedures that are used for solving a computational
problem. An algorithm is different from a program in that algorithms are used
during the Software-design-phase. An algorithm should be independent of
programming languages and are analyzed for performance. In order to design an
algorithm, a designer must have domain knowledge of the problem that they are
attempting to solve.&lt;/p&gt;</description></item><item><title>Apache Iceberg</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/apache-iceberg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/apache-iceberg/</guid><description>&lt;h1 id="apache-iceberg"&gt;&lt;a href="https://iceberg.apache.org/docs/nightly/"&gt;Apache Iceberg&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Apache Iceberg is an open table format for huge, slow-changing, analytic
data-sets. Iceberg aims to support the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Schema evolution with no side effects&lt;/li&gt;
&lt;li&gt;Hidden partitioning to avoid performance penalties and user error&lt;/li&gt;
&lt;li&gt;Partition layout evolution as data and patterns evolve over time&lt;/li&gt;
&lt;li&gt;Time travel to reproduce historical queries&lt;/li&gt;
&lt;li&gt;Version rollback to correct problems by resetting to a known good state&lt;/li&gt;
&lt;li&gt;Readers isolated from concurrent writes&lt;/li&gt;
&lt;li&gt;Writers add and remove files atomically&lt;/li&gt;
&lt;li&gt;Planning and scanning takes &lt;code&gt;O(1)&lt;/code&gt; and is not impacted by table size&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because Iceberg has been designed for large data-sets it can be used in
production where a single table is measured in petabytes. Iceberg is also
designed to solve correctness problems in eventually-consistent cloud object
stores. It is cloud platform agnostic, table changes are atomic so readers never
see partial changes, and concurrent writers when experiencing conflicts will
retry to ensure updates are compatible.&lt;/p&gt;</description></item><item><title>Binary</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/binary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/binary/</guid><description>&lt;h1 id="binary"&gt;Binary&lt;/h1&gt;
&lt;p&gt;Binary is a base 2 number system that is used in machine code. It can be handy
at times to transform data to binary or to preform bit-wise operations.&lt;/p&gt;
&lt;h2 id="corner-cases"&gt;Corner cases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Negative numbers&lt;/li&gt;
&lt;li&gt;Overflow/underflow errors&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="bit-wise-operations"&gt;Bit-wise operations&lt;/h2&gt;
&lt;h3 id="check-if-kth-bit-is-set"&gt;Check if k&amp;rsquo;th bit is set&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; (&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;k&lt;/span&gt;) &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="set-the-kth-bit"&gt;Set the k&amp;rsquo;th bit&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;|=&lt;/span&gt; (&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;k&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="clear-the-kth-bit"&gt;Clear the k&amp;rsquo;th bit&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;=&lt;/span&gt; ^(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;k&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="toggle-the-kth-bit"&gt;Toggle the k&amp;rsquo;th bit&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; ^= (&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;k&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="multiply-by-2k"&gt;Multiply by 2^k&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;k&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="divide-by-2k"&gt;Divide by 2^k&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;k&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="check-if-power-of-2"&gt;Check if power of 2&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)) &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="swap-two-variables"&gt;Swap two variables&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num2&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;uint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num1&lt;/span&gt; ^= &lt;span style="color:#a6e22e"&gt;num2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num2&lt;/span&gt; ^= &lt;span style="color:#a6e22e"&gt;num1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;num1&lt;/span&gt; ^= &lt;span style="color:#a6e22e"&gt;num2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/tech-interview-handbook"&gt;Tech-Interview-Handbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Chris Hecker Interview Process</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/chris-hecker-interviewing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/chris-hecker-interviewing/</guid><description>&lt;h1 id="chris-hecker-interview-process"&gt;Chris Hecker Interview Process&lt;/h1&gt;
&lt;p&gt;The Chris Hecker interview process is an approach to interviewing software
engineers that focuses on assessing the candidate based on topics they should
already be very familiar with. It is designed to put the candidate into an
authoritative position where they have all the answers instead of presenting
them a problem they have zero familiarity with.&lt;/p&gt;
&lt;p&gt;The interviewer&amp;rsquo;s role is to ask clarifying questions to test the candidate&amp;rsquo;s
technical knowledge of projects they have worked on. This will often involve
asking questions the interviewer may already know the answer to, but framing it
as if they don&amp;rsquo;t. This gives the candidate the opportunity to explain a subject
and demonstrate if they have a deeper technical understanding or just surface
level details. It also shows off how good a candidate is at communicating ideas
to someone who is unfamiliar with them.&lt;/p&gt;</description></item><item><title>Computational technique</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/computational-technique/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/computational-technique/</guid><description>&lt;h1 id="computational-technique"&gt;Computational Technique&lt;/h1&gt;</description></item><item><title>Computer Engineering</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/computer-engineering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/computer-engineering/</guid><description>&lt;h1 id="computer-engineering"&gt;Computer Engineering&lt;/h1&gt;</description></item><item><title>CPU</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/cpu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/cpu/</guid><description>&lt;h1 id="cpu"&gt;CPU&lt;/h1&gt;
&lt;p&gt;The central processing unit (CPU) is the active part of a computer that is made
up of the &lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/datapath"&gt;Datapath&lt;/a&gt; and
&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/control"&gt;Control&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="cpu-execution-time"&gt;CPU execution time&lt;/h2&gt;
&lt;p&gt;CPU execution time is the time spent by the processor to complete a task&lt;/p&gt;
&lt;h3 id="user-cpu-time"&gt;User CPU time&lt;/h3&gt;
&lt;p&gt;The time spent on the program itself&lt;/p&gt;
&lt;h3 id="system-cpu-time"&gt;System CPU time&lt;/h3&gt;
&lt;p&gt;The time spent in the operating system on behalf of a program&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/computer-organization-and-design"&gt;Computer Organization and Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Data Oriented Design</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/data-oriented-design/data-oriented-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/data-oriented-design/data-oriented-design/</guid><description>&lt;h1 id="data-oriented-design"&gt;Data Oriented Design&lt;/h1&gt;
&lt;p&gt;Data-oriented design is an approach to software development that focuses on
separating the data from context and operations. It values leveraging
fundamental computer science data structures and algorithms rather than modeling
the problem domain in the application. The trade off is a sacrifice of human
readability and initial software development speed for flexibility, maintenance,
and performance.&lt;/p&gt;
&lt;p&gt;Data oriented design is not a product or library to be added to a project, it is
a technique to be learned. While data can be generic in type it is rarely
generic in how it is used. Transformations can be generic, but the ordering and
selection of those transformations is literally the solution to the problem.&lt;/p&gt;</description></item><item><title>Data Structures</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/data-structures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/data-structures/</guid><description>&lt;h1 id="data-structures"&gt;Data Structures&lt;/h1&gt;</description></item><item><title>Design Patterns</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/design-patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/design-patterns/</guid><description>&lt;h1 id="design-patterns"&gt;Design Patterns&lt;/h1&gt;</description></item><item><title>Dynamic programming</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/dynamic-programming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/dynamic-programming/</guid><description>&lt;h1 id="dynamic-programming"&gt;Dynamic programming&lt;/h1&gt;
&lt;p&gt;Dynamic programming is a technique for efficiently implementing a recursive
algorithm by storing partial results. This is helpful because it allows for an
exhaustive search without processing the same partial result over and over. It
is important to know that this is a trade off of time complexity for space.&lt;/p&gt;
&lt;h2 id="examples"&gt;Examples&lt;/h2&gt;
&lt;h3 id="go"&gt;go&lt;/h3&gt;
&lt;h4 id="before"&gt;Before&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fib&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;n&lt;/span&gt; &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;n&lt;/span&gt; &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fib&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fib&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="after"&gt;After&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;miss&lt;/span&gt; = &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;maxN&lt;/span&gt; = &lt;span style="color:#ae81ff"&gt;92&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt; = make([]&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;maxN&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fibDriver&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;i&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;range&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;i&lt;/span&gt;] = &lt;span style="color:#a6e22e"&gt;miss&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;] = &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] = &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fib&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fib&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;miss&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;] = &lt;span style="color:#a6e22e"&gt;fib&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fib&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cache&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/tech-interview-handbook"&gt;Tech-Interview-Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/the-algorithm-design-manual"&gt;The-Algorithm-Design-Manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Entity component system</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/entity-component-system/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/entity-component-system/</guid><description>&lt;h1 id="entity-component-system"&gt;Entity component system&lt;/h1&gt;
&lt;p&gt;Entity component systems simplify architecture and encourage separation of
responsibilities.&lt;/p&gt;</description></item><item><title>Floating points</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/floating-points/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/floating-points/</guid><description>&lt;h1 id="floating-points"&gt;Floating points&lt;/h1&gt;
&lt;p&gt;The concept of floating point numbers was created to solve the problem that
integer values cannot represent fractional numbers. Floating point numbers are
an approximation of real numbers due to the fact that their is an infinite
number of fractions between two integers.&lt;/p&gt;
&lt;h2 id="ieee-754"&gt;IEEE-754&lt;/h2&gt;
&lt;p&gt;The IEEE-754 standard for floats is that some bits represent a mantissa and
other bits represent an exponent that is applied as a multiplier to the
mantissa.&lt;/p&gt;</description></item><item><title>Go</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/go-programming-language/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/go-programming-language/</guid><description>&lt;h1 id="go"&gt;Go&lt;/h1&gt;
&lt;p&gt;Go is a statically typed, compiled high-level programming language designed at
Google. It shares similarities with C, but has memory safety, garbage
collection, structural typing, and concurrency.&lt;/p&gt;</description></item><item><title>High level language</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/high-level-language/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/high-level-language/</guid><description>&lt;h1 id="high-level-language"&gt;High level language&lt;/h1&gt;
&lt;p&gt;A programming language that can be compiled into assembly language and then
assembled into machine language.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/computer-organization-and-design"&gt;Computer-Organization-and-Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Input</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/input/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/input/</guid><description>&lt;h1 id="input"&gt;Input&lt;/h1&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/computer-organization-and-design"&gt;Computer Organization and Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Interger literals</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/integers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/integers/</guid><description>&lt;h1 id="integer-literals"&gt;Integer literals&lt;/h1&gt;
&lt;p&gt;Integer literals are numbered values that do not have a fractional component or
an exponent.&lt;/p&gt;
&lt;h2 id="representation"&gt;Representation&lt;/h2&gt;
&lt;p&gt;Integer literals can be represented in many different forms for convenience. The
more common forms are as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// These are different representations of the same literal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;binary&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0b1101&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;decimal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;octal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;o15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;hexadecimal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0x0d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="twos-complement"&gt;Two&amp;rsquo;s complement&lt;/h2&gt;
&lt;p&gt;For signed integer literals, two&amp;rsquo;s complement is an efficient method for storing
positive and negative values.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Left-most bit denotes the sign. (0 is positive, 1 is negative)&lt;/li&gt;
&lt;li&gt;Positive values are expressed in typical binary form&lt;/li&gt;
&lt;li&gt;Negative values are expressed in binary with the bits inverted + 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This allows for very easy addition and subtraction operations for the processor.
As an added benefit, there is also only one way to represent 0 rather than
potentially having a positive and negative 0.&lt;/p&gt;</description></item><item><title>Linux</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/linux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/linux/</guid><description>&lt;h1 id="linux"&gt;Linux&lt;/h1&gt;</description></item><item><title>Memory</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/memory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/memory/</guid><description>&lt;h1 id="memory"&gt;Memory&lt;/h1&gt;
&lt;p&gt;The storage area where programs exist when they are running. It is also where
data is kept that is needed by running programs.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/computer-organization-and-design"&gt;Computer Organization and Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Output</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/output/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/output/</guid><description>&lt;h1 id="output"&gt;Output&lt;/h1&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/computer-organization-and-design"&gt;Computer Organization and Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Problem solving techniques</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/problem-solving-techniques/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/problem-solving-techniques/</guid><description>&lt;h1 id="problem-solving-techniques"&gt;Problem solving techniques&lt;/h1&gt;
&lt;p&gt;When solving unfamiliar problems in software engineering, it is best to take a
structured approach when breaking the problem down. In addition, make sure the
problem is fully understood by gathering more information and discussing the
problem with colleagues.&lt;/p&gt;
&lt;h2 id="visualize"&gt;Visualize&lt;/h2&gt;
&lt;p&gt;Use a white board or paper to draw out diagrams or map the problem out state by
state. This can prove to be critical when working with
&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/tree"&gt;trees&lt;/a&gt;, &lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/graph"&gt;graphs&lt;/a&gt;,
&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/matrix"&gt;matrices&lt;/a&gt;, and
&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/linked-list"&gt;linked lists&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Site Reliability Engineering</title><link>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/site-reliability-engineering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://maladroit-dev-398201.gitlab.io/kb/computer-engineering/site-reliability-engineering/</guid><description>&lt;h1 id="site-reliability-engineering"&gt;Site Reliability Engineering&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Hope is not a strategy&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A site reliability engineer (SRE) is a software engineer that focuses on solving
operational issues with software, creating Service-Level-Objects minimizing toil
of manual tasks, reduce the cost of failure, and share ownership with
developers.&lt;/p&gt;
&lt;h2 id="tenants"&gt;Tenants&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Availability&lt;/li&gt;
&lt;li&gt;Latency&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Efficiency&lt;/li&gt;
&lt;li&gt;[[change-management]]&lt;/li&gt;
&lt;li&gt;[[monitoring]]&lt;/li&gt;
&lt;li&gt;[[capacity-planning]]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="principles"&gt;Principles&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Embracing-risk&lt;/li&gt;
&lt;li&gt;Eliminating-toil&lt;/li&gt;
&lt;li&gt;Monitoring-distributed-systems&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;li&gt;Release-engineering&lt;/li&gt;
&lt;li&gt;Simplicity&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maladroit-dev-398201.gitlab.io/kb/reference/sre-book"&gt;SRE Book&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>