The eli4d Gazette – Issue 072: Stackoverflow’s 2019 Developer Survey and Running BASIC Games

Stackoverflow’s 2019 Developer Survey

Another week…another developer survey 😺. The key results section summarizes the results well: Python is growing and devops jobs have high salaries.

Like all surveys, this one needs to be taken with a large grain of salt. Parts of the survey that I found interesting:

BASIC Computer Games

BASIC was my first programming language. It was a great programming language at the time (even with PEEKs and POKEs).

I came across a Hacker News article that linked to runnable BASIC games 😮. The Vintage Basic site provides a BASIC interpreter that will run on all platforms. Amazing!


You can find the newsletter archive at https://eli4d.com/category/newsletter/ and the blog at eli4d.com.

Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 063: A Thanksgiving Feast of Developer Flash Cards, Black Friday Deals, and the YNAB Book

Flash Cards for Developers

Spaced repetition via flashcards is a great way to learn new information. I came across flashcardsfordevelopers.com while listening to a recent Syntax.fm podcast (one of my current favorites when it comes to tech podcasts).

There are tons of different flash card collections including:

It’s a neat resource for both learning and review.

Winter is Coming…wait no…Black Friday is coming

I’ve been lax in past years about Black Friday deals. However, this year, I’m going to try to be more proactive about having a list of items for Black Friday shopping. I’ve found the Wirecutter to be a great review site that helps me answer the “what are two best choices for xyz product?”.

The Wirecutter has an excellent article on how to prepare for all the Black Friday and Cyber Monday deals. I especially like the emergency preparation section.

Just Finished Reading

I just finished the “You Need A Budget” book. I had purchased it from Audible during a sale before Audible decided to send deals to only Audible subscribers (makes sense I suppose…but still annoying). This book is excellent. Jesse Mecham has the perfect voice for audio (this is extremely unusual for an author) and he comes across in a frank and personable way. While I haven’t yet tried the YNAB approach to budgeting, I certainly intend to give it a whirl. An important point about this book is it does not push the YNAB service/product. The only place any information shows up is in the appendix. Base on the title it’s easy to assume that the book exists to market the service (since so many other books do exactly that), but Jesse is sincere in conveying his belief that a budget is a way to freedom rather than restriction.

One other thing I need to mention is chapter 9. Chapter 9 describes his approach to giving allowance to his kids. It’s a very concrete action based approach based on the book “The Opposite of Spoiled: Raising Kids Who Are Grounded, Generous, and Smart About Money”. I’m definitely going to explore this approach.

I highly recommend this book in audio format!


Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 058: Git Flow Branching Model and Fatherhood & Side Projects

The Git Flow Branching Model

I’ve been working on a side project where I’m close to placing it in “production” (though it feels like it’s taking forever). I’ve been using Git and Bitbucket to save different project phases (I found a great explanation of Git and Github at https://blog.red-badger.com/blog/2016/11/29/gitgithub-in-plain-english).

I wanted to follow a decent Git branching strategy, so I carefully reread Vincent Driessen‘s original 2010 article about it.

There have been many different implementations of the”Git Flow” approach. I prefer to use Git directly than using an abstraction layer on top of Git so that I can better understand what’s going on. I looked around, and Driessen’s article still stands as the most unambiguous step-by-step approach.

Fatherhood and Side Projects

I came across an interesting Hacker News thread that discusses the issues around programmatic side projects and fatherhood. Note that the actual project that is the origin for this post is not as important as the back and forth questions and responses.

My progress on a programmatic side project has been glacial (as mentioned above). For me, it’s more about accepting this and letting go of the “I should have been done with it six months ago” and being mindful of the present.


Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 056: Python’s former BDFL and the Apollo 11 Moon Landing

Python’s former BDFL

Human languages take millennia to develop, whereas programming languages can take less than a month for initial design. Human languages are evolutionary, and programming languages take on the preferences, principles, and beliefs of their designer.

If the programming language is successful in terms of adoption and usage, then the language moves from its (initial) one person design to evolution that is based on the opinions and preferences of many people in conjunction with the emergence of current trends and fads (including competing languages).

Many times, the language designer is throned as its BDFL – benevolent dictator for life. He or she gets to have final say on the evolution of the language…until they have enough.

Python was created by Guido Van Rossum in 1991. It’s been evolving for 27 years with Guido as its BDFL until last week.

Twenty-seven years is a very long time for a programming language to both survive and thrive. It’s also a long time to wrestle and dispute the various proposals for Python’s evolution.

Apollo 11 Old Style Re-broadcast

On a lighter note, I came across this charming page about the Apollo 11 moon landing (mentioned in a recent Studio Neat issue). While the date/time re-broadcast is over, you can see the Apollo 11 landing through some links to YouTube.


Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 054: Dependency and Package Managers in Python and PHP

Python Environment and Package Installation

I saw a recent XKCD comic that describes the current state of setting up a Python development environment:

Python Environment

The excellent Explain XKCD site covers the point of the cartoon. The issue is the (ongoing) difficult transition from Python 2.x to Python 3.x and the reality that there is no defacto package installation tool. The messiness of Python’s development environment deeply contrasts with the cleanliness and beauty of the actual language.

One interesting and significant effort in approaching the above issue can be found through the PyPi package manager. A great FLOSS Weekly episode had an interview with one of the maintainers of the new PyPi covering its pros and cons.

PHP’s Composer and Package System

In the PHP world – Packgist site is the definite destination for third-party PHP packages. In conjunction with these packages, Composer is the defacto package/dependency management tool. It’s more than a package manager because it focuses on managing packages on a per project basis.

At its core Composer focuses on dependency management and the secondary result is that it also does package management. One problem that arises is the usage of Composer as a pure package installer across a system rather than just a project. As Composer’s documentation states:

By default it does not install anything globally. Thus, it is a dependency manager. however support a “global” project for convenience via the global command.

Composer’s “global” command installs packages in a common central project and this, in turn, can cause major headaches with projects that have packages installed in different locations.

Pantheon’s blog describes this issue (and its solution) really well:

One of the most commonly documented ways for a PHP command line tool to be installed is via the composer global require command. This command is easy to document and easy to run, which explains its popularity. Unfortunately, this convenient function has a darker side that can cause some pretty big problems. The root of the problem is that Composer, by design, manages dependencies on a per-project basis; however, the global command installs everything into a common central project. The upshot of this is that two distinct projects that were never intended to be combined must suddenly share dependencies. In this configuration, it is all-too-common to encounter dependency conflicts that never would have been observed had these applications been installed independently.

The current solution to this is a Pantheon created tool called Cgr. The blog article provides details on its usage and when to use Composer global.

Note: many thanks to the folks on the Poststatus Slack for discussing Composer’s issues and pointing to Cgr.

The eli4d Gazette – Issue 051: JavaScript Array/Object Methods and the Meaning of “=”

An Excellent Syntax.fm Episode on Array and Object Methods in JavaScript

The Syntax.fm podcast had an excellent episode covering Array/Object methods, as well as shallow versus deep copies and reference versus copies in JavaScript. It is an episode that I’m highly recommending to my JavaScript students.

What does “=” mean?

Another programming topic – assignment versus equality. Hillel Wayne covers this concept/issue in an excellent article about this very issue. If you’re new to programming, here are some pointers to the terminology used in this article:

Image credit: This nice high-resolution image comes from the DigiBarn museum site.

Mother Tongues


Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 049: DevDocs.io and the BaseCS Podcast

DevDocs.io – an amazing programming documentation resource

While scanning through Quincy Larson’s excellent posts I came across the DevDocs site and how it has recently joined the freeCodeCamp family.

DevDocs allows you to rapidly search for documentation of various languages and frameworks. It is similar to Dash but through a web page and it’s free. The best way to use this resource is to add it as a keyword to your browser (per site’s instructions). Having one location for software development documentation is excellent and having this under Freecodecamp’s stewardship guarantees that this resource will only get better over time.

A gentle introduction to computer science through the BaseCS podcast

I’ve come across this extremely charming and useful podcast that goes through computer science in a gradual well-paced way.

The format revolves around one topic, and it is a question/answer type of conversation between Saron (founder of the Code Newbie site) and Vaidehi Joshi. Saron is the questioner and Vaidehi is the CS “explainer in chief”.

Each episode of the BaseCS podcast comes with a well-written article from Vaidehi Joshi’s site.


Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 48: Learning Django 2 and the 2018 Stack Overflow Developer Survey

If you’re interested in learning Django 2

As a teacher and a learner, I’m on the lookout for great folks that create courses. If you’re interested in learning the Django framework (this may especially be of interest to my former Python students) then you might be interested in this kickstarter campaign by Tracy Osborn. Tracy approaches programming from a web designer point-of-view, and this is quite valuable from a “beginner’s mind” approach.

Check out the 2018 Stack Overflow Developer Survey

Stack Overflow is an amazing question and answer site that covers a tremendous amount of software development issues. It started originally as a response to Experts Exchange and has far exceeded its competitor’s breadth, depth, and utility.

Stack Overflow’s yearly development surveys have become an industry staple for software development trends. It’s an in-depth survey that has become better and better over the years. The 2018 survey is quite deep and extensive and is a well worth read.

If you’re looking for a concise summary of the 2018 survey, then check out Quincy Larson‘s summary.


Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 047: Keeping up with Software Industry and Developer Marketing

Keeping up with the Fast Pace of the Software Development Industry

The Syntax.fm podcast had an excellent episode about the issues (and solutions) of keeping up with the fast pace of software development. While this podcast is more skewed towards JavaScript, the suggested approaches apply to all programming languages, libraries, and technologies. Some interesting points (which I bookmarked in my twitter feed):

  • At 15 minutes and 46 seconds: a sane approach to this fast-moving field
    • maintain core programming skills in whatever language that you’re versed in
    • practice “just in time learning” for everything else
  • At 47 minutes and 42 seconds: how to stay up-to-date

Developer Marketing and Landing Pages

I listened to 2 excellent episodes from the Release Notes podcast about the art of creating landing pages for various types of products. Justin Jackson does an excellent job of explaining his approach, as well as providing actionable advice. You can find the episodes here:


Thoughts? Feedback? Let me know: @eli4d on Twitter


The eli4d Gazette – Issue 046: Programming Language Affordance and DHH’s Reason for StimulusJS Creation

Tech Pick (Programming Language Affordance)

I am a huge fan of Sandi Metz. She’s like one of those Zen masters that snap their students out of their current perceptual ruts.

In a recent article (‘What Does OO Afford’) Sandi goes into a great reflection about Object Oriented programming and the affordances that this approach provides. It’s a great and worthwhile post. One section that strikes me is the following:

Just like varying styles of doorknob, different programming languages offer their own unique affordances. Language designers have preconceived ideas about the best way to model reality, and their creations reflect these biases. Thus, programming languages are explicitly designed to “enable” certain kinds of thinking.

I’m talking about something that’s deeper than syntax. Languages have points-of-view: they’re designed to be used in certain stylized ways. The mere fact that code compiles doesn’t mean it’s arranged as the language designer intended.

While it’s possible to warp most any programming language into use by an alternate way of thinking, working at cross-purposes from your language’s intentions is not the most efficient way to write code. Don’t roll this rock uphill. If you don’t understand your language’s affordances, learn them. If your coding inclinations conflict with the designer’s biases, yield.

The above puts language wars in perspective. A language is designed to model reality in a certain way. If it takes off due to significant adoption (whether organic or through environment limitations like JavaScript), then warping occurs as developers try to use this hammer to nail every problem.

Media Pick (JavaScript Framework Choice)

The most recent Full Stack Radio podcast fits quite well with Sandi’s article. It features an interview with David Heinemeier Hansson.

In this interview, he discusses his company’s (Basecamp) release of a JavaScript framework named Stimulus. It’s interesting to learn how he chose Ruby‘s affordances over the those given by various JavaScript frameworks (like React, Vue, etc…). So Stimulus supports this choice by keeping as much of the programming on the server side via Ruby and Ruby on Rails.


Thoughts? Feedback? Let me know: @eli4d on Twitter