Recommended Developer Resources

Recommended Developer Resources

It's probably a safe assumption that someone who has spent almost two decades developing applications of every size, shape, and color in almost a dozen languages has a few tips and tricks to share with peers both junior and senior alike.Well, it just so happens that I do! Being the nice person that I am, I thought it would be a good idea to share it with the community. I consider this document to be living, as I will attempt to keep it updated as things evolve.


Practices and Standards

For the more junior developers among you, these two words aren't as horrid as you might think. For the more senior, these two words aren't as strict as you might think either. Good practices and standards help to ensure lower technical debt, easier maintenance of the code, and more compatible operations with other teams and applications, both inside and outside of your organization.

Code Standards

Believe it or not, a lot of time is wasted just interpreting code. What makes it easier to interpret? Well the first step is agreeing upon and enforcing code standards. Will everyone use snake_case, PascalCase, or camelCase? How many spaces make up a tab indentation? What about naming functions, classes, and enums? Then there are the questions about brace positioning, trailing white spaces, and even code comments.

For those of you new to development, you're probably asking yourself why any of this matters. Trust me, for code readability and sanity checking alone, it matters. Which standard you pick is up to you, however what matters the most is that your team agrees on whatever the standard is. I'm going to list what I prefer here, as it should at least give you a good start.

  • Naming

When naming classes, decorators, and interfaces - I prefer to use PascalCase. For variables, constants, and functions/methods I prefer to use camelCase. Enums are where I go rogue - and utilize CAPITALIZED_SNAKE_CASE. I know, i'm a renegade.

// This is an example of PascalCase class naming
export class Foo implements IFoo {

  // This is an example of camelCase variable/constant naming
  private readonly bar: string = 'All your base, are belong to us!';
  
    constructor(bar: string) {
      this.bar = bar;
    }
    
    // This is an example of camelCase function naming
    public zigZag(): void {
      console.log(this.bar);
    }
}
                        
// This is an example of PascalCase interface naming
export interface IFoo {
  bar: string;
  zigZag(): void;
}

// This is an example of CAPITALIZED_SNAKE_CASE enum naming
export enum FOO_BAR {
  CHEESE_PIZZA,
  PEPPERONI_PIZZA,
  NO_PIZZA
}
                      
  • Braces

This one i'm pretty much a ruthless dictator about during code reviews. Do you place braces on the same line as the definition of the method (or object in some cases) or the next line? If you're asking my opinion, i'd say that they absolutely, positively MUST be on the same line as the definition!

// RIGHT WAY! Says me!
public doSomething(foo: string): void {
  console.log(foo);
}

// WRONG WAY!
public doSomething(foo: string): void
{
  console.log(foo);
}

  • Spaces

Spacing can have several standards depending on what you're doing. Control keywords such as if and switch should be followed by a space. Operators and assignments such as +, =, and / should have a space on either side. Opening braces { should be preceded by a space. Function calls and period (.) separated items should not have spaces at all. Also, don't trail a line with a space, most linters will complain anyways!

// if has a trailing space before (
// > has a space on either side
// { has a space before it
if (apples > bananas) {

  //doSomethingFruity has no space between the name and the ()
  doSomethingFruity(grapes, pears);

  // this.foo has no spacing
  // Yet the assignment operator has a space on either side
  this.foo = bar;
      
}

public doSomethingFruity(grapes: number, pears: number): void {
  
  // Period separated items like this.countOFruit have no spaces
  this.countOFruit = grapes + pears;

}

  • Comments

It goes without saying that comments are very important. My top three reasons to stop and comment, even when up against a razor thin deadline are:

1. Forget your team for a minute, and trust me when I say that you will not remember what your code does six months from now, let alone two years.

2. When used with a documentation generator, it cuts out all sorts of work later on. Examples of these are JSDoc (JavaScript & TypeScript), Javadoc (Java), and phpDocumentor (PHP), and of course Doxygen for many languages.

3. Tools such as VSCode can read those comments and provide helpful information about how to use it when say calling an overloaded function, just by hovering.

--------------------------------------------------------------------------------------------

Helpful resources

The Twelve Factor Application

Yes, you need to know this. Yes, it will make you a better developer and/or architect. Yes, it's correct. The introduction from 12factor.net states:

The twelve-factor app is a methodology for building software-as-a-service apps that can be applied to apps written in any programming language, and which use any combination of backing services (database, queue, memory cache, etc).

In addition, it goes on to state that those apps will:

  • Use declarative formats for setup automation, to minimize time and cost for new developers joining the project;
  • Have a clean contract with the underlying operating system, offering maximum portability between execution environments;
  • Are suitable for deployment on modern cloud platforms, obviating the need for servers and systems administration;
  • Minimize divergence between development and production, enabling continuous deployment for maximum agility;
  • And can scale up without significant changes to tooling, architecture, or development practices.

JSON Schema

Whether you are working on an API service or a native mobile app, you need to understand JSON inside and out. It is being used more and more over XML and other formats, in part due to its reduced size and native object consumption in JavaScript. JSON Schema is a vocabulary that allows you to annotate and validate JSON documents. Learn it!

SMACSS

Pronounced smacks, it stands for Scalable and Modular Architecture for CSS (That's Cascading Style Sheets for those not in the know). It's a style guide for how to build out CSS in a site. While it is specific to CSS, I believe there are some reusable concepts in overall project layout, regardless of the language. This guide has been a great personal growth tool in architecture. Really.

Mozilla Developer Network (MDN)

If you're working with any web technologies (JavaScript, CSS 3, HTML 5, etc.), MDN has emerged as the holy grail of documentation and how-to. At the time of writing, VSCode recently integrated its IDE with MDN, providing quick links to related references. You'll soon not be able to live without it, I know I can't!

Wikipedia

No, i'm not trying to be funny. When building software for a given use case, I find it extremely helpful to create its building blocks by defining its real world representation. Not only does this ensure that I can handle any real world use case in my code without using hacks, it means that I can also build on top of the application quickly because my foundation is rock solid. For example if I am building an application that helps with inventory management in a warehouse, I'm going to want to imagine myself inside a warehouse and describe everything around me in models within the code. I see shelves/racks, those racks have several rows, maybe those rows have bins; Maybe I should then create a model for a bin, it's got a width, length, height, possibly a color, maximum volume and maximum weight. Can it only hold solids or can it hold liquids? Can it be stacked? What about those rows, they have a size as well, a depth and a height, but they also have bins so we reference that bin model we created earlier, and so on and so on.

What does this have to do with Wikipedia? When you define those models, or interchange the data within them with other applications or organizations - you're going to want to make sure that you are following international standards as closely as possible to minimize the chance you have missed something or implemented it in a way that others wont be able to easily translate. Date and time for example are defined by ISO8601, country and subdivision codes by ISO3166, and units of measurement defined by SI.

To be fair, Wikipedia isn't the only great resource here. Many of the ISO standards are freely available at their Publicly Available Standards site, which includes ANSI SQL (ISO/IEC 9075-1:2011). The United Nations provides a wealth of information and guidelines as part of their effort to facilitate global trade: UN centre for trade facilitation and e-business (UN/CEFACT). There's also GS1 which does a great job of defining standards across retail, manufacturing, supply chain, healthcare, information technology, and so on.

--------------------------------------------------------------------------------------------

Online Tools

Yeah I know, this list could get pretty long and I'm sure everyone has a new suggestion. However, these are the ones that I tend to use most often regardless of language or project.

RegExr

Screenshot of RegExr

RegExr is an online tool that helps you build regular expressions against a sample dataset. It includes a cheatsheet with commonly used patterns and a full regular expression reference. You'll thank me later.



JWT.io

Screenshot of JWT.io

If you're doing any web development, front end or back end, you will need to secure it. One of the most common methods today is using a JWT or JSON Web Token. While the definition of how it works is a little beyond the scope of this article, know that a secure method of representing claims between two parties and is an industry standard (RFC 7519). If you need to build or decode one (including validate its signature), JWT.io is a great resource to do that quickly. Just paste the token and see the contents. Verify its signature by providing the algorithm and secret or certificate.


Screenshot of Swagger/OpenAPI Editor

Swagger/OpenAPI Editor

So this one is specific to APIs - but it's a real gem. Build out your API definition in JSON or YAML and the editor will not only present documentation around it in an easily navigable interface, but it also provides automatic server AND client code generation in dozens of languages (node, python, asp .net, java, and many more).



Screenshot of JSON Editor

JSON Editor

This one is very similar to the Swagger/OpenAPI Editor, at least in its interface. The great thing about this editor is that it allows you to paste in any valid JSON and it will automatically build a schema based on it. Very useful when mocking up a new API response or request to get input from stakeholders and consumers.


CodePen and GitHub Gist

Screenshot of GitHub Gist

If you're working with JavaScript, TypeScript, CSS, SASS, SCSS, or Less - CodePen is a great utility. It lets you create functioning snippets of code and then share them with others. The other tool here is GitHub Gist, which is basically a fat-free GitHub repository focused on snippets vs. entire projects.


GitHub and Azure DevOps

Screenshot of Azure DevOps pipelines

I'm sure you've heard of GitHub, free public repositories and a huge community. The one you may be less familiar with is Azure DevOps. I truly adore this platform, completely integrated end-to-end CI/CD from story and task creation, to public or private Git or TFS repositories, to test plans and automation, all the way through release pipelines. It integrates with hundreds of platforms and tools - both inside and outside of Azure, on-prem or cloud. Did I mention it's 100% free for small teams and individuals?

--------------------------------------------------------------------------------------------

Offline Tools (sort of)

I suppose there is no such thing as an 'offline' tool anymore, as every app has some level of connectivity.

Visual Studio Code (VSCode)

Free and Open Source, runs on Windows, Linux, and Mac. Lightweight. Thousands of extensions. Completely Configurable. Seriously folks, there is no excuse not to use this great IDE - even if you still have an unreasonable hatred for Microsoft.

Slack

Whether your team is spread out across the globe or you all sit within 5 feet of each other, Slack helps you communicate and share. It's free with a few limitations, and has lots of interesting application integrations.

Postman

If you're developing an API Server or Client, this tool is absolutely essential. From automated testing to shared collections, this is the defacto standard in API development.

Bitvise SSH Client

You will most likely need to remotely login to a console at some point, probably over SSH instead of Remote Desktop. Bitvise SSH Client is the most robust (and free) SSH client for Windows. On Linux or Mac? Well, you already have a command line SSH that works just fine :)

Notepad++

I can't describe it better than they do, so:

Notepad++ is a free (as in “free speech” and also as in “free beer”) source code editor and Notepad replacement that supports several languages.

Also, it's just for Windows, sorry Mac users.

Docker Desktop

Building and deploying containers with Docker can be easily managed with Docker Desktop for Windows and Mac. It also comes with the Docker Agent, which you'd also use on Linux but without the GUI you get on Windows and Mac.

A Visual Database Manager

I don't have any one specific tool here to recommend because it can vary widely based on the database platform and client OS. Therefore, i'll just list out your options and tell you which (known) databases they support! I'm not listing paid or 'enterprise' tools such as TOAD (Tools for Oracle Application Developers), the ones here are all free to use or offer a pretty powerful free version.

  1. SQL Server Management Studio - This is the most mature of any of the database managers listed here regardless of the underlying database server. Down sides are that it only connects to SQL Server (In cloud or on-premises) and only runs on Windows. If you're on Mac or Linux, you'll need to try Azure Data Studio or DBeaver to connect to SQL Server.
  2. Azure Data Studio - This one is relatively new but it does have some advantages and unique capabilities. It has a workbook that allows you to create interactive SQL scripts inside a Wiki style 'notebook' that supports markdown - all inline, which makes run-books and collaboration so much easier. It also has built in support for Git repositories, so you can easily keep your scripts in version control. It is built on the foundation of VS Code so it's pretty darned light and runs on Windows, Linux, and Mac. It connects to a few major database server platforms including SQL Server and PostgreSQL, it works for both on-premises and cloud database servers, and it also is the only tool that currently supports Active Directory integration with Azure Database for PostgreSQL.
  3. DBeaver - No, not leave it to 'd beaver. DBeaver is pretty much the open source Swiss army knife of database management tools. It runs on Windows, Linux, and Mac and connects to any database server that has a JDBC driver for it (pretty much everything). The enterprise (paid) version also supports non-JDBC connectivity with platforms like Redis and Cassandra. Another great feature is its automatic entity relationship diagramming, which builds a visual representation of the entire database or of a single table.
  4. pgAdmin - The most widely used database management tool by far for PostgreSQL is pgAdmin. It's browser based and runs on Windows, Linux, and Mac. Simple, easy to use, and drives you crazy with its update notifications.
  5. Oracle SQL Developer - This tool has come a long way in the last few years. Oracle did a good job of copying features that SQL Server Management Studio and TOAD offer to make this tool much more powerful and easy to use. They have also added support for other database platforms such as MySQL, HIVE, SQL Server, Sybase, and DB2. SQL Developer runs on Windows, Linux and Mac.
  6. MySQL Workbench - To be completely transparent, I haven't used this tool very much, and with so many other choices to connect to MySQL and Maria databases - installing one more tool just seems silly. It is being listed in fairness because I also listed a specific tool for PostgreSQL (pgAdmin). This one does run on Windows, Linux and Mac as well.
  7. IBM Data Studio - Again, in complete transparency, I don't really use DB2. I've just never had a need, but if you do - this appears to be one of the best options out there. It runs on Windows and Linux (which means that it will most likely run on Mac with some convincing). Keep in mind that DBeaver and Oracle SQL Developer will also both connect to DB2 servers.

--------------------------------------------------------------------------------------------

Design Resources

It almost seems that every project these days is full stack. That means you need lots of great design and inspiration sources at your fingertips for the UI. These are the most common places I frequent:

Behance - Create and Browse creative works across interaction, product, and game design plus many more curated galleries of works. Behance is an Adobe site.

Dribble - Discover top designers and browse their works. Lots of inspiration can be found here!

Google Fonts - Huge resource of free fonts, of which you can download and serve/use yourself or use from Google's CDN.

Pexels - Free stock photos and illustrations. Really great creative works from up and coming photographers and illustrators. Your payment is acknowledgement!

Coverr - A growing trend in web design is to embed a background video into a page. Coverr makes this easy with a large collection of free to use video clips.

uiGradients - Another growing trend in web design is the use of more and more gradients in everything from buttons to backgrounds. uiGradients is a great resource for beautiful CSS gradients.

SASS/SCSS Mixins - If you're using SCSS (if not, why?), you get the awesome capability to use mixins. This site has 10 great mixins to use in most of your front end projects.

Hamburgers by Jonathan Suh - Many sites use hamburgers now for expandable menus, especially mobile friendly ones. This talented individual has created over a dozen hamburger animations in pure CSS. Head on over and check them out.

Font Awesome - OK it's not just Font Awesome, it's all major icon font libraries out there such as Glyphicons and Ionic. Font Awesome is definitely the largest collection anywhere, and they have a very affordable pro license that I recommend. These beautiful icon fonts will add visual appeal to your site with a very small footprint, and take away almost all the problems encountered by working with images.

A Complete Guide to Flexbox - In my opinion, one of the best things to come out of CSS3 (the current version of CSS for those of you living under a rock) is flexbox, especially as we are scolded for using old fashioned tables to perform layouts, and div alignment never cooperating. If you aren't using display: flex, you will after playing with it for a few minutes. This guide really helps illustrate the different parameters to get the layout you want exactly right, every time.

CSS-Tricks - In addition to the flexbox guide that I called out above, CSS-Tricks has a huge archive of guides to help those just starting out to advanced concepts like SVG fallbacks.

Can I use... - I am ashamed to have missed this one in the initial version of this document. Can I use helps to determine, among other things, browser compatibility of specific features of HTML 5 and CSS3. You should always check this at a minimum before production moves. Always.

--------------------------------------------------------------------------------------------

Cloud

Last but not least, you have to have somewhere to put all of the insane output that you're generating with these tools! Most of these you should already know about, but i'm listing them for continuity :)

Azure

Microsoft's cloud platform. It is my humble opinion that out of all of the cloud providers, only Microsoft and Google live up to the hype of cloud. The reason is simply this: Service Fabric and Kubernetes, respectively. Without going into too much detail here, Service Fabric is a Microsoft platform (that is now open source, by the way) that manages the deployment and orchestration of software across a network or 'fabric' of interconnected infrastructure (like a data center).

You can get about 25 always free services, as well as a 12 month trial and a $200 credit to explore their offerings. Free Azure Account.

AWS (Amazon Web Services)

I know, this is a lot like telling Macy's that tomorrow is the day after Thanksgiving (Black Friday for those unfamiliar with my reference!). AWS seems to be the defacto standard for many startups (although Azure and GCP are just as good if not better for startups). I'm not personally familiar with the true underlying platform for AWS, but have heard some refer to it as duct tape and rubber bands holding the ship together. Never the less, they offer lots of always free services as well.

GCP (Google Cloud Platform)

As I mentioned in my statements about Azure, Google Cloud is the only other cloud provider that truly lives up to the hype. Google adopted all of their own super robust technology that they use to serve billions of requests per day and basically offered it to the public in the form of Google Cloud Platform. This thing is rock solid, and most of it is built on the backbone of Kubernetes and some other key Google tech. The only down side is that I don't personally care for their Console (the web management portal), but that could be from my dislike of Material design too! Just like the others, they offer a free tier.

IBM Cloud

IBM Cloud has a much smaller footprint than the three heavy hitters above. IBM Cloud is really just the acquisition of SoftLayer, a Dallas based colo/hosting/cloud provider. Some unique features about IBM Cloud include what I would consider a much more advanced AI in Watson, you can still spin up bare metal servers if you'd like, and you can play around with a Quantum processor. They offer a relatively robust free tier as well.

Oracle Cloud

I have mixed emotions about Oracle, the negative which i'll keep out of this article! It does seem like these guys finally got their head in the game, and appear to be a solid #5 option. For me, the fact that they realized a free tier is important mostly for developer buy-in, is a game changer for them. I also believe that with their new always free offerings, which include two Oracle databases or Data Warehouses and two VMs with load balancing and extra storage, make their free tier one of, if not the best out there.

--------------------------------------------------------------------------------------------

The end!

At the end of all of this, I applaud your attention span! Thanks for reading and let me know if there's something new (or old) that I should check out!

Last Update: Monday, January 13, 2020@ 10:52 PM UTC

Previous Updates:

  • Tuesday, October 8, 2019 @ 10:59 AM UTC - Initial Publish

Great post, Johnathan! Hope it's cool if I share this with a couple of developers in my network. I'll also be bookmarking this for future reference. 

Like
Reply

Thanks for sharing.. I just heard a speaker at our conference talk about (and I'm paraphrasing) how [some people get intimidated by new technology that changes the way they have always worked, but others learn how to adapt and, more importantly, document how they learn so they can bring their peers along with the change] - kudos! 

Awesome read, Johnathan S.. Truly informative, insightful, and knowledge-filled. Am surely bookmarking this for future reference. 

To view or add a comment, sign in

More articles by Johnathan S.

  • An open letter to 2018

    Dear 2018, January found me confident, despite reporting to four separate managers in just 2 years. February found me…

    2 Comments
  • Autonomy in Logistics - The Operational Reality

    Self driving trucks, robotic warehouses, two-hour delivery of almost anything; this is the new reality of our world…

  • Every Byte Counts

    While it is painfully obvious that computing power has grown exponentially since the invention of the integrated…

    1 Comment

Others also viewed

Explore content categories