Top 10 Books Every Programmer Should Read

[et_pb_section fb_built=”1″ _builder_version=”3.22″][et_pb_row _builder_version=”3.25″ background_size=”initial” background_position=”top_left” background_repeat=”repeat”][et_pb_column type=”4_4″ _builder_version=”3.25″ custom_padding=”|||” custom_padding__hover=”|||”][et_pb_text _builder_version=”3.27.4″ background_size=”initial” background_position=”top_left” background_repeat=”repeat”]

This list used to the “Most Recommended Books in StackOverflow” and
I often refer to this list at http://www.dev-books.com/, but the site is no longer available.
and the only related reference to that now is this blog post showing how the author made the site
https://www.freecodecamp.org/news/i-analyzed-every-book-ever-mentioned-on-stack-overflow-here-are-the-most-popular-ones-eee0891f1786/

  1. working effectively with legacy code – Michael Feathers
  2. Design Patterns: Elements of Reusable Object-Oriented Software – “The Gang of Four”
  3. Clean Code – Robert Martin
  4. Java Concurrency in Practice – Brian Goetz
  5. Domain Driven Design – Eric Evans
  6. JavaScript: The Good Parts – Douglas Crockford
  7. Patterns of Enterprise Application Architecture: Martin Fowler
  8. Code Complete – Steve McConnell
  9. Refactoring – Martin Fowler
  10. Head First Design Patterns: A Brain-Friendly Guide  – Eric Freema

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.4.1″][et_pb_column _builder_version=”4.4.1″ type=”4_4″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″]

If you want to make the most out of this COVID19 Lockdown you may opt to get these books in Kindle format from Amazon

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.4.1″ column_structure=”1_5,1_5,1_5,1_5,1_5″ hover_enabled=”0″][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″]
[/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.4.1″ column_structure=”1_5,1_5,1_5,1_5,1_5″][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][et_pb_column _builder_version=”4.4.1″ type=”1_5″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″][/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.4.1″][et_pb_column _builder_version=”4.4.1″ type=”4_4″][et_pb_text _builder_version=”4.4.1″ hover_enabled=”0″]

these 10 Ebooks (Kindle) will be around $304 in total but is definitely a solid investment for your software development career. The price might seem high for some but trust me, wasting your years doing on unguided,non-standard methodologies is more wasteful.

i have only read 3 of these and the others are still on my shelf,

Working Effectively with Legacy Code is the only resource that gave me a solid definition of what legacy code is and with that the knowledge on how to prevent having legacy code and improving the maintainability of any software project.

Clean Code helped me a lot especially when my career shifted to being just a web developer to being a techlead (from doing most coding to doing code reviews, setting quality standards, automating code reviews, ci/cd)

Domain Driven Design helped me build modular systems which is very important in this age of microservices. I’d argue that everyone who wants to do microservices needs to read this one first. Being a Systems Admininistrator of a Kubernetes-based Architecture, DDD helps me create better microservice designs along with the development teams 

[/et_pb_text][/et_pb_column][/et_pb_row][/et_pb_section]

are you working with software?

[et_pb_section admin_label=”section”] [et_pb_row admin_label=”row”] [et_pb_column type=”4_4″][et_pb_text admin_label=”Text”]

if you work with software you should be browsing https://dev.to/

it is a community of programmers by programmers

the site makes it easy to stumble upon new usable information everyday

anyway, if you aint in the mood to be productive today why not vent-out and rant away at https://devrant.com/?

[/et_pb_text][/et_pb_column] [/et_pb_row] [/et_pb_section]

How to remove the fear when programmers are asked to work on your codebase

nixcraft_codehandover.png

Problems

  • Sharing Projects/Codebases within a software development team is hard.
  • Programmers sometimes outright say it can’t be done.
  • This affects project deadlines negatively.
  • This is a type of Muda((https://en.wikipedia.org/wiki/Muda_(Japanese_term))) Information Waste which is rework
    • the Author already created the codes, debugged it and made it run.
    • then the next developer has to do it again because THERE IS NO AUTOMATION NOR DOCUMENTATION (see comic above)

Proposed Solution

  • INNERSOURCING – https://resources.github.com/whitepapers/introduction-to-innersource/
  • Borrow proper README formats from opensource projects
    • there are many guides/templates available online like this
    • github.com/PurpleBooth/README-template
    • this removes the question of WTH do i do with this repository?
    • this removes the muda rework because a copy+paste guide is already available
    • this allows a new-developer-in-the-project to quickly start working on business requirements and not waste time on technical specifics that should’ve already been handled by the author/initial team who worked on the project.

Quick Breakdown of the sections of the proposed README format

greatly inspired by https://gist.github.com/PurpleBooth/109311bb0361f32d87a2

  • Project Title – a meaningful name that indicates the problem you are trying to solve
  • Getting Started – any piece of context you wish to share to future maintaners
  • Prerequisites – skills you need to have, tools you need to know and software needed installed
  • Installing – how to get the project runnning~
  • Running Tests – how to ensure that the project really works before others start working on it
  • Deployment – how to release the finished project and some details where the application is actually in use right now
  • Built With – tools/frameworks used, to quickly match people who could work on this project.
  • Contributing – Coding standards / Architecture Design Decisions so the codebase will retain looking like it was written by a single person and therefore easier for future maintainers to understand.

Proposed KPI for a maintanable Software Project

  • Software Developers (Especially Tech Leads) metrics should include “how easy is it to onboard new developers on projects that I led”
    • this is in contrast to smartass developers who take pride in obfuscating their code because it makes them look smart.

From Wikipedia

Muda is a Japanese word meaning “futility; uselessness; wastefulness”,[1] and is a key concept in lean process thinking, like the Toyota Production System (TPS) as one of the three types of deviation from optimal allocation of resources (the others being mura and muri).[2] Waste reduction is an effective way to increase profitability.

From Wikipedia

Single Responsibility Principle – and why it matters

image found from reddit

This image is a perfect example why we need to adhere to SRP (Single Responsibility Principle).

Imagine how terrible would it be to have your elevator disabled due to a light switch that has tight coupling to the main functions of the elevator.

Examples like this are easy to understand because you know what exactly a lightbulb,what exactly an eleveator is and their differences/boundaries but when it comes to coding information systems (like a procurement system and a disbursement system) things get muddy because we dont know what they are, how they work and what their differences/boundaries are. Information Systems are often abstract to programmers until they spend long enough time in the domain.

My advice to circumvent that is to read business books and work closely with business people until you understand how the yout system works.

..to be continued

Other Sources you can read

PHP OOP from ZERO – few concepts/theories, mostly syntax just to get you started

This is not a long-winded theoretical blathering that you see all too often; instead, we actually start writing OO code very quickly. I believe that this ‘hands-on’ style of learning, makes understanding OO (object oriented) PHP much easier… and less boring too!

killer.php.com

im keeping this as a bookmark as this site (killerphp.com) really helped me when i was handed with OOP PHP codes back when i did not know OOP.

source: https://www.killerphp.com/tutorials/object-oriented-php/

source(PDF version): http://www.killerphp.com/downloads/object-oriented-php/downloads/oop_in_php_tutorial.pdf

What happened to Agile Software Development?

Many Developers and Project Teams are still in the process of learning agile software development.
I think the best place to learn it is from one of the founders himself.

In this talk by Robert Martin (Uncle Bob) you will learn how the industry was prior to Agile and why Industry needed Agile.

In this other presentation, you will learn what happened to Agile in ways that the founders never intended.

Bonus

watch this guy talk about scrum/agility and reconfirm your understanding about it.

Core Agile Principles

If you haven’t seen the Agile Manifesto yet, here you go.

*screenshot from http://agilemanifesto.org/

You also need to see the 12 agile principles. Practices like Scrum/Kanban/XP are just implementations of these principles. You do not need to follow every prescription of these practices as long as your custom workflows abide with the agile principles.
see: principles vs practices

“Agile” is more of a mindset than a tool set.  It is a framework for establishing a positive organizational culture.

If you are based in the philippines and wants to jumpstart or learn more or share about your journey to learn Agile software development, you may join  Agile Philippines! They meetup every last wednesday of the month.
https://agilephilippines.org/
https://www.meetup.com/AgilePhilippines/
https://web.facebook.com/groups/agilephilippines/

Who were the first programmers and Why were they efficient

56yrs ago maybe there were a few thousand programmers in the world.
who where these programmers?
they didnt go to school to learn it.
there weren’t any computer science courses.

Probably they were drawn from existing engineers, mathematicians
who were already employed and their managers went to them
and said “hey we got this job that you might wanna do.
its called programming“, and that time no one knew what that was.

But the interesting thing is that they were already professionals in the industry for a long time (any industry).
People who understood deadlines, schedules and projects.
They came into programming with a lot of knowledge how about business works
and projects work and schedules.

They did not need special processes or management

– Robert C. Martin (Uncle Bob) 2016

this is why it seems more effective for business people to learn how to program (just to gain enough knowledge on how it works)
rather than programmers (who has already invested a lot in their ego) to learn business.
Robert Martin promotes the idea of “The Professional Programmer