The Productive Programmer

0 views
Skip to first unread message

Rode Neagle

unread,
Aug 5, 2024, 1:01:15 PM8/5/24
to quilodisboa
Nowadaysthe book on your frontend web framework can be thicker than what a C64 programmer needed to write a complete game. On the other hand, the information for everything that we need to write code today is usually no more than one click away.

Therefore, docsets can replace documentation that you already keep locally on your computer for faster and/or offline access without doing anything special. Just package it up into the necessary directory structure, add an empty index, and fill out simple metadata.


And while Python and Go core documentation ship with Dash, and while Godoc documentation can be added directly by URL3, no matter how hard Dash will try: in the fragmented world of modern software development, it will never be able to deliver everything I need.


doc2dash knows how to extract the name from the intersphinx index and uses it by default (you can override it with --name). You should be able to add this docset to an API browser of your choice and everything should work.


Since I want to create a new version of the docsets for every new release, the creation needs to be automated. structlog is already using GitHub Actions as CI, so it makes sense to use it for building the docset too.


tox is a combination of Make and a virtual environment manager based on the ini file format. Its original purpose was testing Python software over multiple Python versions but has grown a lot more powerful.


My biggest hope, though, is that this article inspires someone to help me add more formats to doc2dash, such that even more programmers get to enjoy the bliss of API documentation at their fingertips.


Never leaving their own comfort zone or never thinking outside the boxis one major reason why programmers get stuck. They rely on deprecatedrituals, fall prey to old habits which they cannot strip off or adhereto technologies to which they are often heavily attached. SometimesNPPs identify themselves with a special technology. This is visiblewhen they introduce themselves as Spring or ReactJS developer.


The quantity of experience is only one dimension. More important isthe quality and deepness of experience. Especially NPPs suffer fromsuperficial knowledge because in their work life, they never went deepinto details. They apply their accumulated knowledge again and againwithout gaining a deeper understanding in their used technologies orproblem domains.


The quality of experience can vary strongly. NPPs often end up in avicious cycle. They move from project to project and theacquired knowledge of the first year is enough for accomplishing thenext one. Due to the similarity of other projects, NPPs are neverexposed to harder problems or forced to go out of their comfortzone. E.g. Java NPPs will never learn deeper foundational topics whichare necessary to grow like the internals of the JVM, Profiling orConcurrency.


One of my personal programming pet peeves is the It works, so whychange? attitude. Typical crime scenes are daily Pull Requests orSoftware Design Reviews. NPPs are reluctant to do the simplest changeslike variable/function renamings or other coderestructurings.


In the contrast to NPPs, great developers write maintainable codereadable by humans, test their code rigorously with unit tests,refactor their code regularly and most importantly they are willing togo the extra mile in Pull Requests or Design Reviews and strive for ahealthy codebase.


After reading about Microservices, NPPs fall for thehype. Microservices are considered as a holy grail but come withserioustrade-offswhich are usually forgotten or not known. For example,microservices solve organizational scaling problems and causetechnologyproblemsbut only a minority of applications will ever reach such ascale. Inmost circumstances the majesticmonolith is thebetter solution.


Changing your attitude and applying the above points make you a betterprogrammer. But how to become interested in the deeper things or howto train programmers to look behind the curtain? Well, everyone isdifferent but from my experience following things work:


Gather information. You cannot know it all: reading books,conversations with colleagues, listening to technical talks are goodsources to grow. Even if you never use the gathered knowledgedirectly, it will give you good intuition for future problems,e.g. knowing about Functional Programming makes you a better (Java)Programmer.


The great thing about measuring developer productivity is that you can quickly identify the bad programmers. I want to tell you about the worst programmer I know, and why I fought to keep him in the team.


A few years ago I wrote a Twitter/X thread about the best programmer I know, which I should write up as a blog post. It seems only fair to tell you about the worst one too. His name is Tim Mackinnon and I want you to know how measurably unproductive he is.


With seniors it was more like co-creating or sparring; bringing different worldviews to bear on a problem, to produce something better than either of us would have thought of on our own. Tim is a heck of a programmer, and you always learn something pairing with him.


DORA metrics, for example, are about how the system of work works, whether as Westrum culture indicators or flow of technical change into production. They measure the engine, not the contribution of individual pistons, because that makes no sense.


Everyone wants to be more productive, but how do you become more productive? Well, hopefully you'll find some answers in this article where I've compiled 20 easy, tried and tested methods for becoming more productive as a developer!


Deep work is a productivity method that's all about getting into the zone. The idea is that you try working non-stop for long periods of time(2 to 3 hours) so that you get into a sort of flow. Then, when you're in that flow, it's going to be hard to break out and start procrastinating again.


We've all been in a rut (really unproductive time-period) where we don't seem to have any motivation or energy, and we just generally feel unable to get any work done. When this happens, the best thing to do is to do something. Do some chores around the house/apartment, write some code(doesn't have to relevant to your job/projects), write a blog post. Just doing something productive is often the best way to get out of a rut and getting back on track!


Think of that thing that you've been procrastinating on for a long time. This can be a hard project, or learning something that's intimidating. Now, start on it with no hesitation. Just start. You might be afraid of making mistakes or not quite getting it the first time, but once you start, you'll gradually become more and more comfortable with that task!


Multi-tasking can be a killer of productivity. Single-tasking is a method that encourages you to focus on one thing at a time. This way, you will spend less time and energy on going back and forth between tasks.


Lots of productivity methods encourage you to make some sort of to-do list. But not-to-do lists are often overlooked, yet can be very useful for productivity!

At the beginning of your day, make a not-to-do list. This list will contain unproductive things that you want to avoid doing like using Reddit or Twitter, chatting with friends during your working hours or listening to podcasts that distract you.


SMART is a goal-setting formula that encourages you to be as detailed and concrete about what it is you are trying to achieve. SMART stands for Specific, Measurable, Assignable, Realistic, Time-related. This means that when you set a goal it should be well defined in a clear way.


When you feel that you're tired and can't work anymore, instead of trying to push yourself, acknowledge that you need a break and take it. It's often better to take breaks when you are mentally drained than to push yourself for 3 reasons:


Once I realized number 12 (Biological Time) it was so clutch for me. The only issue I run into now is having colleagues who are on different biological clocks. I am most alert from 5:30 to 11:30am. However, 11:30 onward is when my day really begins. Nonetheless, I am so much more productive having realized this, and keep my afternoons/evenings for more fun/personal projects to relax with.


About pomodoro: what to you folks do for rest? In my experience it either ejects me from my deep flow and I have a hard time getting into it again or it doesn't feel particularly restful/exciting/fullfilling


Doing a short walk around the block maybe a good idea, thanks! I believe time away from screen is best for rest, but I also don't want to change my mind focus too much. So a walk may still give me time to think about it unconsciously. Other similar ideas still welcome though, because a walk may take too much time with getting shoes on and etx


I use number 3 (The Rule of three) alot in my day to day life, to the extent that 3 has become my favourite number.

Think of it this way, always think of 3 most important tasks or things to do, and the rest of the task will be easy to apporach and flow naturally, because you have accomplished and conquered the most difficult task, you will have courage to take on anything.


Why don't you just relax, take your time, and do it right? Why this incredible race to extinction? Do you really think any other outcome is possible, given that we just move ever more rapidly to destroy the biosphere, never even keeping a steady pace much less slowing down? And in the midst of all that and all the devastation around us, all you can think about is how to crank out more useless code in less time so you can be more productive at doing worthless shit.


How about we all slow way down and ask ourselves, what the hell are we doing, why the hell are we doing it, and is there anything else at all we could be doing with our time that might produce a better outcome for all life on Earth?


Most of us are trying to do what we can to stop climate change. Before you assume we're doing "worthless shit". Tell us what you do. Don't assume everyone around you is an ignorant idiot. Then I'll listen.

3a8082e126
Reply all
Reply to author
Forward
0 new messages